2009-01-16 49 views
0

這個問題是Marc Gravell對我的問題Create Out-Of-Process COM in C#/.Net ?給出的答案的後續。我選擇了他提出的解決方案,但現在運行在另一個問題上。如何訪問.Net中的COM +服務器中託管的.Net COM對象?

這裏是我的情況:

  • 我在C#中實施了「DataProvider的」 COM組件
  • 該組件在COM + 服務器應用程序,使多個 進程可以訪問相同 實例承載DataProvider可以通過COM訪問數據提供者的進程類型是Matlab,VB腳本和.Net應用程序。

當從Matlab或VB腳本實例化COM DataProvider時,COM +機制將啓動,並且我可以驗證是否可以使用DataProvider的單個實例。

當我嘗試從.Net訪問COM +託管實例時,問題就出現了。基本上,當一個COM組件基於.Net DLL時,即使延遲加載,.Net總是會找到DLL並從那裏實例化對象,從而跳過整個COM機制。這是預期的表演,但對我來說沒有幫助。

現在對於這個問題: 是否有可能使用COM機制在.Net應用程序中實例化一個.Net書寫的COM組件?

注意,下面的代碼不使用COM機制:

Type type = Type.GetTypeFromProgID(progID); 
    return Activator.CreateInstance(type); 

回答

0

查找到this answer。程序集必須首先添加到GAC,然後必須使用regsvcs實用程序創建COM +應用程序。否則,.Net根本不會查看COM +目錄:

"c:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe" MyObject.dll 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /i MyObject.dll