Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制.NET类型实例化为COM_C#_Com - Fatal编程技术网

C# 强制.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

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

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

实际上,没有

托管对象的COM激活在与调用方相同的AppDomain中完成。这是.NET中COM互操作的一个棘手问题。这里有几个问题,通过各种各样的尝试来实现这一点。我可以证明,我已经尝试了其中的大部分,但都无济于事。您的COM API提供程序应该生成一个PIA(),以确保前向类型兼容性。如果他们没有,你将有一些棘手的问题

作为客户机,我知道的唯一解决方法是只使用“object”类型。一切都需要经过反思。有些事情你仍然不能做。例如,您将无法实现接口


我不知道为什么会这样。为非托管代码和托管代码生成一个可行的api给我带来了无尽的问题。

谢谢您提供的信息。我担心会出现这种情况,因为这与我自己的研究相吻合,但我想在考虑其他选择之前我会先问一下。再次感谢。你打算如何处理那些正在崩溃的对象?请使用COM接口/方法,例如IOleWindow。这些对象可能实现多个接口中的一个或多个,因此我正在检查该对象是否是其中一个接口。当实例化为.NET类型时,COM接口不会通过检查。