2012-04-17 45 views
0

我得到了一個桌面應用程序,它使用C#中編寫的小型DLL作爲COM對象註冊,以從Active Directory收集一些信息。該應用程序是用C++編寫的,它工作正常。我想在C#中編寫一個小應用程序,它將調用相同的已註冊DLL的方法(某種測試工具),但不知道如何在編譯時不引用COM DLL的情況下執行此操作(我真的需要使用COM註冊DLL)從C#客戶端應用程序調用c#COM服務器DLL

I followed this article,設法實例化對象,但我不能將實例強制轉換爲從IDL創建的接口。調試器也知道所有成員顯示的實例的確切類型。我懷疑這是由於DLL也加載在CLR中。

這甚至可能嗎?

謝謝

回答

0

您可以從C#項目中使用COM組件。一般步驟如下:

找到要使用的COM組件並註冊它。使用regsvr32.exe註冊或取消註冊COM DLL。

向項目添加對COM組件或類型庫的引用。

當您添加引用時,Visual Studio將使用類型庫作爲輸入的Tlbimp.exe(類型庫導入程序)輸出.NET Framework互操作程序集。該程序集也稱爲運行時可調用包裝程序(RCW),包含用於包裝類型庫中的COM類和接口的託管類和接口。 Visual Studio將向生成的程序集添加一個引用。

創建一個在RCW中定義的類的實例。這反過來又創建了COM對象的一個​​實例。

與使用其他託管對象一樣使用對象。當垃圾收集回收對象時,COM對象的實例也從內存中釋放。

有關更多信息,請參見將COM組件公開到.NET Framework。

詳細Article

+0

這並不工作,因爲tlbimp.exe是拒絕創建CCW爲.NET程序集在那篇文章中涉及的所有亂七八糟的。 – fiamista 2012-04-17 09:18:00

1

你不能。 IDE將拒絕讓您添加對類型庫的引用。你可以通過使用後期綁定來欺騙它。但是這仍然不能欺騙CLR,它不會創造CCW和RCW。您需要一個本地客戶端,如C++或腳本語言才能真正實現COM特定路徑。

沒有意義,只是直接使用程序集引用,並使用普通的C#代碼來測試它。

0

我會建議你使用.NET 4.0 dynamic類型,而不是與反思你提到