首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在.NET支持下复制IDis补丁*;不知道类名

需要在.NET支持下复制IDis补丁*;不知道类名
EN

Stack Overflow用户
提问于 2011-03-12 01:51:29
回答 1查看 354关注 0票数 1

我使用以下方法在我的.NET程序中托管了一个C++库,尽管不是一个详尽的列表:

代码语言:javascript
复制
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
Invoke()

我有与C++类相对应的.NET类。每个类实例都包含一个CComPtr<IDispatch>,用于调用函数和获取/设置成员变量。

这很好,但当我复制我的C++类时,我得到了两个C++类实例,它们都指向同一个.NET实例。当我在一个实例中更改变量值时,它会反映在另一个实例中。

因此,我非常希望复制我的IDispatch指针,以便每个C++类实例都有一个唯一的.NET类实例。我可以调用CreateInstance(),但是由于各种原因,找出库和类名是不方便的。

tl;博士

如何在不查找类名/库名称的情况下复制.NET后台IDispatch指针?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-12 03:46:38

这是预期的行为,CComPtr复制构造函数将简单地复制接口指针并使用AddRef()添加一个引用。无论是在COM中还是在.NET中,都没有自动创建深拷贝的机制,这与C++没有根本的区别。在.NET,ICloneable中定义了一个众所周知的接口.它几乎不受推荐,接口没有办法让调用者指定需要一个深拷贝而不是浅层副本。使得它几乎毫无用处而且很少被实现。无论如何,COM没有任何类似的东西。

不,您必须维护足够的状态并编写代码来创建一个新对象。一定要回顾一下你对这个的需求。如果您只是为了创建COM对象的副本(以及它的底层.NET对象)而创建该对象的副本,那么您可能不应该复制该副本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5280292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档