gpt4 book ai didi

.net - 需要使用 .NET 支持复制 IDispatch*;不知道类(class)名称

转载 作者:行者123 更新时间:2023-11-30 03:08:11 25 4
gpt4 key购买 nike

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

CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
Invoke()

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

这工作正常,除了当我复制我的 C++ 类时,我最终得到两个 C++ 类实例,它们都指向同一个 .NET 实例。当我在一个实例中更改变量值时,它会反射(reflect)在另一个实例中。

所以,我真的很想复制我的 IDispatch 指针,这样每个 C++ 类实例都有一个唯一的 .NET 类实例。我可以调用CreateInstance() , 但由于各种原因,不方便弄清楚库和类的名称。

tl;dr
如何在不查找类/库名称的情况下复制 .NET 支持的 IDispatch 指针?

谢谢!

最佳答案

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

不,您必须维护足够的状态并编写代码来创建新对象。请检查您对此的需求。如果您只是为了创建 COM 对象(及其底层 .NET 对象)的拷贝而制作 C++ 对象拷贝,那么您可能不应该制作该拷贝。

关于.net - 需要使用 .NET 支持复制 IDispatch*;不知道类(class)名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280292/

25 4 0
文章推荐: java - 如何在沉浸中启用 "ok glass"?
文章推荐: java - "<\div>"
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com