我有一个项目,它引用列表中的几个com对象(对于每个对象)。我需要在循环中复制一个对象,并在迭代中将其与第二个对象进行比较
我不确定如何按值复制com对象。请帮忙。
感谢。
答案 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持久性接口(IPersistFile
,IPersistMoniker
),但它们使用起来有点困难。