我有一個項目,它在列表中引用了少數com對象(對於每個項目)。我需要在循環中複製一個對象,並在迭代中將其與第二個對象進行比較。
我不知道如何通過值複製COM對象。請幫忙。
謝謝。通過.NET中的值複製COM對象
1
A
回答
2
您看不到COM對象的內部狀態,因爲您只有一個接口。
您僅限於COM接口可能暴露的任何屬性獲取器和推杆。
對於某些對象,獲取每個屬性,並調用匹配的put_
函數可能就足夠了。在某些情況下,它可能不是。
存在一些用於序列化或持久化的接口,您可以使用它們來存儲對象,然後重新生成一個對象的副本。
某些COM接口可能會暴露->Clone()
方法。但這很少見。
簡而言之,沒有可靠的方法來克隆任何通用的COM對象。 COM對象必須以某種方式支持複製
2
檢查您的COM對象是否支持IPersistStream
或理想情況下IPersistStreamInit
。這將允許您將COM對象狀態保存到COM流(System.Runtime.InteropServices.ComTypes.IStream
)。
您可以使用CreateStreamOnHGlobal
API創建內存中的COM流,然後創建一個新的COM對象並從流中恢復其狀態。基本上,你會有一個克隆的對象。
還有其他COM持久性接口(IPersistFile
,IPersistMoniker
),但它們會更難使用。
相關問題
- 1. C#通過值複製一個對象
- 2. .NET強制COM對象發佈
- 3. 如何通過COM方法返回一個.NET對象數組
- 4. 如何通過COM Interop訪問複雜對象的屬性?
- 5. 複製不可序列化(COM)對象
- 6. .net COM +返回IDataReader對象
- 7. 複製對象值
- 8. 類的對象副本的引用,其中作爲.NET對象複製價值
- 9. 在C#.NET中使用C++中的COM對象返回對象[]
- 10. 通過COM使用.Net類Delphi中的對象有時會掛起
- 11. 如何訪問.Net中的COM +服務器中託管的.Net COM對象?
- 12. 複製對象javascript以便通過值傳遞
- 13. 複製自定義對象按值複製它不是通過引用
- 14. 通過宏複製excel中的值
- 15. 如何通過COM互操作調用.NET對象上的靜態方法?
- 16. 基類中的COM對象 - 通過字段或屬性訪問?
- 17. 通過.NET COM設置System.Drawing.Color Interop
- 18. Classic.ASP通過COM調用.NET組件
- 19. 從.NET C調用COM對象#
- 20. 從VBScript調用.NET COM對象
- 21. 將.NET COM對象遷移到64位
- 22. 向Asp Net Core添加COM對象
- 23. 使用.NET註冊com對象dll
- 24. 在調試過程中複製對象
- 25. 如何在C++中通過引用複製對象?
- 26. 如何將Delphi的.NET COM對象的實例傳遞給另一個.NET COM對象?
- 27. 如何從C#.NET強制釋放COM服務器對象
- 28. 如何在.Net 2.0中將IDictionary的值複製到IList對象中?
- 29. 發佈通過Html.BeginForm()的複雜對象
- 30. 通過json對象獲取對象而不是值「讀取」通過json對象
實際上,如果COM對象支持[COM持久性](http://stackoverflow.com/a/28470998/1768303),則可能有可靠的方法。 – Noseratio 2015-02-12 06:45:21