2011-08-04 49 views
3

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

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

谢谢!

+0

你想用这些打破的对象做什么? –

+0

使用COM接口/方法,IOleWindow为例。这些对象可能会实现一个或多个接口,所以我正在检查该对象是否是其中一个接口。当实例化为.NET类型时,COM接口不通过检查。 – Joe

回答

4

其实没有。

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

我知道作为客户端唯一的解决方法是只使用'对象'类型。一切都需要经过反思。有些事情你仍然无法做到。例如,你将无法实现一个接口。

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

+0

感谢您的信息。我担心情况会如此,因为它与我自己的研究相符,但我想在查看其他选项之前我会问。再次感谢。 – Joe