强制.NET类型实例化为COM

时间:2011-08-04 21:14:38

标签: c# com

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

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

谢谢!

1 个答案:

答案 0 :(得分:4)

实际上,没有。

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

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

我不知道为什么这样工作。这导致我无法为非托管代码和托管代码生成可行的api。