我用下面的方法托管.NET库在我的C++程序,虽然不是一个详尽的列表:需要使用.NET支持复制IDispatch *;不知道类名
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
Invoke()
我必须对应于.NET类C++类。每个类实例都包含一个CComPtr<IDispatch>
,我用它来调用函数和获取/设置成员变量。
这工作正常,除了我拷贝我的C++类时,我最终得到了两个指向同一个.NET实例的C++类实例。当我在一个实例中更改变量值时,它会反映在另一个实例中。
所以,我真的很想复制我的IDispatch指针,以便每个C++类实例都有一个唯一的.NET类实例。我可以拨打CreateInstance()
,但由于各种原因,找出图书馆和班级名称很不方便。
TL;博士
我如何可以复制我的.NET支持的IDispatch指针头也不抬类/库的名称?
谢谢!
一般来说,这是一个坏主意(TM)从非托管代码使用.NET;另一种方式很好。但是,您可以检查.NET对象是否支持ICloneable,如果是,则使用它来克隆它。更好的是,如果您绝对必须这样做,那么通过声明私有或受保护的副本构造函数和复制赋值运算符,可以使您的C++实例不可复制。 – 2011-03-12 03:21:36
嗯,我已经做到了。除了复杂性和低效率之外,为什么它不是一个好主意?我显然不是从本地代码中使用.NET来获得乐趣。 – David 2011-03-17 00:44:19
除了复杂性和低效率以外,还可以。它就像从5公里自由降落到地球一样,除了最终的影响外,还可以。 :-) – 2011-03-17 00:54:43