2011-06-10 48 views
2

我創建了一個.NET 2 COM +組件,供我們古老的ASP經典網站使用。這在傳統的ASP很簡單,做...從C#應用程序調用本地.NET(2)COM +組件

Dim MenuManager : Set MenuManager = Server.CreateObject("MenuManager.MenuManager") 

不過,我想性能配置使用C#控制檯應用程序的組件。

如何在C#控制檯應用程序中調用此函數?

+0

順便說一下,我不希望只引用.NET DLL,我實際上希望COM +坐在那裏運行在本地機器上,就像在生產環境中一樣。 – 2011-06-10 23:08:01

回答

7

您正在使用CreateObject()函數的後期綁定。您想竊取,乞討或借用VS2010的副本,以便使用C#4.0 動態關鍵字來簡化操作。這是類似的代碼,適用於任何機器。它使用後期綁定來創建FileSystemObject COM組件,前兩行等同於您的代碼片段。它列出了C的子目錄:\ Windows文件夾:

using System; 

class Program { 
    static void Main(string[] args) { 
     var type = Type.GetTypeFromProgID("Scripting.FileSystemObject"); 
     dynamic obj = Activator.CreateInstance(type); 
     dynamic win = obj.GetFolder("c:/windows"); 
     foreach (dynamic subwin in win.SubFolders) { 
      Console.WriteLine(subwin.Name); 
     } 
     Console.ReadLine(); 
    } 
} 

如果您不能使用C#版本4,則可以考慮使用VB.NET來代替。它具有相同的語法,並且還具有CreateObject()函數。

0

要從C#中調用本機代碼COM對象,請選擇添加引用,然後選擇COM選項卡並使用它添加對COM對象類型庫的引用。這將運行TLBIMP來導入你的類型庫併爲COM對象生成一組很好的包裝和類型。然後你可以使用這些類型和包裝來實例化你的COM對象並調用它的方法。

這對使用託管代碼實現的COM對象不起作用。 TLBIMP工具注意到類型庫是從託管代碼生成的,並拒絕導入它。相反,它表明您只需將.NET引用添加到程序集中。

您可能可以手動構建一組COM封裝器as described here。但是,當你使用由@Hans建議的更直接的解決方案時,這似乎是一個可怕的工作很多

相關問題