2008-12-15 68 views
11

我有一個.NET程序集,我已經通過tlb文件暴露給COM,以及註冊了tlb的安裝程序。我已手動檢查安裝程序是否正常工作,並且COM客戶端可以訪問該庫。到目前爲止,這麼好...是否可以從.NET測試COM暴露的程序集?

但是,我試圖把一些自動系統測試放在一起,檢查安裝程序是否正常工作。作爲其中的一部分,我已經在VM上自動完成了安裝,現在我想對安裝的COM庫進行一些調用,以驗證它是否正常工作。我原本以爲在VB6中編寫一些測試,但我已經有一大堆用C#編寫的測試,它引用了.NET程序集。我希望我可以改變這些引用.tlb,但是當我在VS2008中嘗試這個時出現錯誤:

ActiveX類型庫'blah.tlb'從.NET程序集中導出,無法添加作爲參考。

有什麼辦法可以欺騙VS2008進入允許我添加這個引用,也許通過編輯tlb文件?

谷歌沒有提出任何解決方案。所有我發現是微軟的連接文章稱,這是「通過設計」:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=120882

+0

有幾個人提到使用tlbimp.exe。如果我嘗試tlbimp.exe是blah.tlb我得到的錯誤:「等等,從一個CLR程序集導出,並且不能被重新導入爲CLR組件類型庫」 – Akash 2008-12-15 11:35:47

回答

12

的最近我已經得到了一個解決方案被稱爲是如下所示:

using System; 
class ComClass 
{ 
    public bool CallFunction(arg1, arg2) 
    { 
     Type ComType; 
     object ComObject; 

     ComType = Type.GetTypeFromProgID("Registered.ComClass"); 
     // Create an instance of your COM Registered Object. 
     ComObject = Activator.CreateInstance(ComType); 

     object[] args = new object[2]; 
     args[0] = arg1; 
     args[1] = arg2; 

     // Call the Method and cast return to whatever it should be. 
     return (bool)ComType.InvokeMember("MethodToCall", BindingFlags.InvokeMethod, null, ComObject, args)) 
    } 
} 

這不是很漂亮,但我認爲得到了重點。您當然可以將ComObject實例化放入構造函數中,並將其餘的調用包裝到該對象中,但對於測試代碼可能不需要。

-1

使用tlbimp.exe可以生成從您的COM組件的裝配中,可以在.NET代碼中使用

+2

若COM組件在C#或其他.NET語言創建 – 2011-04-18 19:04:44

+2

-1理由相同意見:若COM組件在C#或其他.NET語言創建 – peenut 2011-08-30 10:56:51

0

你應該能夠使用TLBImp爲已安裝的COM組件創建包裝類,然後針對該組件運行測試。你會基本上可以寫一個.NET程序集,安裝,爲COM然後對包裝類測試,以便您的測試將被路由,就好像它是由一個COM組件

相關問題