按.NET中的值复制COM对象

时间:2015-02-12 04:04:06

标签: .net com


我有一个项目,它引用列表中的几个com对象(对于每个对象)。我需要在循环中复制一个对象,并在迭代中将其与第二个对象进行比较 我不确定如何按值复制com对象。请帮忙。
感谢。

2 个答案:

答案 0 :(得分:2)

您无法看到COM对象的内部状态,因为您只有一个接口。

您仅限于COM接口可能公开的任何属性getter和putter。

对于某些对象,获取所有可用属性并调用匹配的put_函数可能就足够了。在某些情况下,它可能不是。

存在一些用于序列化或持久化的接口,您可以使用它们来存储对象,然后复制它的副本。

某些COM接口可能会公开->Clone()方法。但这很少见。

简而言之,没有可靠的方法来克隆任何通用COM对象。 COM对象必须以某种方式支持重复

答案 1 :(得分:2)

检查您的COM对象是否支持IPersistStream,或者理想情况下是IPersistStreamInit。这将允许您将COM对象状态保存到COM流(System.Runtime.InteropServices.ComTypes.IStream)。

您可以使用CreateStreamOnHGlobal API创建内存中的COM流,然后创建新的COM对象并从流中恢复其状态。基本上,你有一个克隆的对象。

还有其他COM持久性接口(IPersistFileIPersistMoniker),但它们使用起来有点困难。