我使用以下方法在我的.NET程序中托管了一个C++库,尽管不是一个详尽的列表:
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
Invoke()我有与C++类相对应的.NET类。每个类实例都包含一个CComPtr<IDispatch>,用于调用函数和获取/设置成员变量。
这很好,但当我复制我的C++类时,我得到了两个C++类实例,它们都指向同一个.NET实例。当我在一个实例中更改变量值时,它会反映在另一个实例中。
因此,我非常希望复制我的IDispatch指针,以便每个C++类实例都有一个唯一的.NET类实例。我可以调用CreateInstance(),但是由于各种原因,找出库和类名是不方便的。
tl;博士
如何在不查找类名/库名称的情况下复制.NET后台IDispatch指针?
谢谢!
发布于 2011-03-12 03:46:38
这是预期的行为,CComPtr复制构造函数将简单地复制接口指针并使用AddRef()添加一个引用。无论是在COM中还是在.NET中,都没有自动创建深拷贝的机制,这与C++没有根本的区别。在.NET,ICloneable中定义了一个众所周知的接口.它几乎不受推荐,接口没有办法让调用者指定需要一个深拷贝而不是浅层副本。使得它几乎毫无用处而且很少被实现。无论如何,COM没有任何类似的东西。
不,您必须维护足够的状态并编写代码来创建一个新对象。一定要回顾一下你对这个的需求。如果您只是为了创建COM对象的副本(以及它的底层.NET对象)而创建该对象的副本,那么您可能不应该复制该副本。
https://stackoverflow.com/questions/5280292
复制相似问题