C# 强制.NET类型实例化为COM
是否可以强制COM可见的.NET程序集实例化为System.\u ComObject,而不是.NET类型?我问的原因是,我的应用程序的一部分使用了第三方COM对象,但其中一些在.NET中编写时被实例化为其.NET类型,并破坏了我创建的对象处理程序。我无法控制用于创建COM对象的方法。目前,我正在使用以下方法创建对象C# 强制.NET类型实例化为COM,c#,com,C#,Com,是否可以强制COM可见的.NET程序集实例化为System.\u ComObject,而不是.NET类型?我问的原因是,我的应用程序的一部分使用了第三方COM对象,但其中一些在.NET中编写时被实例化为其.NET类型,并破坏了我创建的对象处理程序。我无法控制用于创建COM对象的方法。目前,我正在使用以下方法创建对象 Type comType = Type.GetTypeFromCLSID(objectGUID); comObject = Activator.CreateInstance(comT
Type comType = Type.GetTypeFromCLSID(objectGUID);
comObject = Activator.CreateInstance(comType);
谢谢 实际上,没有
托管对象的COM激活在与调用方相同的AppDomain中完成。这是.NET中COM互操作的一个棘手问题。这里有几个问题,通过各种各样的尝试来实现这一点。我可以证明,我已经尝试了其中的大部分,但都无济于事。您的COM API提供程序应该生成一个PIA(),以确保前向类型兼容性。如果他们没有,你将有一些棘手的问题
作为客户机,我知道的唯一解决方法是只使用“object”类型。一切都需要经过反思。有些事情你仍然不能做。例如,您将无法实现接口
我不知道为什么会这样。为非托管代码和托管代码生成一个可行的api给我带来了无尽的问题。谢谢您提供的信息。我担心会出现这种情况,因为这与我自己的研究相吻合,但我想在考虑其他选择之前我会先问一下。再次感谢。你打算如何处理那些正在崩溃的对象?请使用COM接口/方法,例如IOleWindow。这些对象可能实现多个接口中的一个或多个,因此我正在检查该对象是否是其中一个接口。当实例化为.NET类型时,COM接口不会通过检查。