c# - 强制 .NET 类型实例化为 COM

标签 c# com

是否可以强制将 COM 可见 .NET 程序集实例化为 System.__ComObject,而不是 .NET 类型?我问的原因是,我的应用程序的一部分使用第 3 方 COM 对象,但其中一些在用 .NET 编写时会被实例化为它们的 .NET 类型并破坏我创建的对象处理程序。我无法控制用于创建 COM 对象的方法。目前我正在使用以下内容创建对象。

Type comType = Type.GetTypeFromCLSID(objectGUID);
comObject = Activator.CreateInstance(comType);

谢谢!

最佳答案

实际上,没有。

托管对象的 COM 激活是在与调用者相同的 AppDomain 中完成的。恕我直言,这是 .NET 中 COM 互操作的一个令人讨厌的问题。这里有几个关于 SO 的问题,并进行了各种尝试来完成这项工作。我可以证明我已经尝试了其中的大部分都无济于事。您的 COM API 提供商应该生成 PIA ( Primary Interop Assembly ) 以确保前向类型兼容性。如果不是,您将遇到一些棘手的问题。

作为客户,我知道的唯一解决方法是只使用“对象”类型。一切都需要经过反射(reflection)。有些事情你还是做不到。例如,您将无法实现接口(interface)。

我不知道为什么会这样。这让我在为非托管和托管代码生成可行的 API 时遇到了无穷无尽的问题。

关于c# - 强制 .NET 类型实例化为 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948600/

相关文章:

c# - 如何从 C# 中的文件路径获取子字符串?

c# - 无法创建具有复杂编程链的 ADODB.Connection

delphi - Outlook 对象模型 - 检测电子邮件是否已发送

c++ - COM:返回字符串的拷贝,还是实际值?

c# - 您认为 F# 的异步工作流将来会在 C# 中引入吗?

c# - GetPrivateProfileString 没有修剪?

c# - 当目标是对象时,JSON.net 将 json 数组序列化为 JArray。我该如何改变它?

c# - Javascript 变量包含 asp.net mvc razor 代码而不是值

c++ - BSTR 到 std::string (std::wstring),反之亦然

C++ COM接口(interface)继承