2011-08-04 64 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