2012-05-01 16 views
2

我想在我的C#DLL中實現一個COM接口供其他人使用。我已經在foo.idl中定義了一個接口。使用tlbimp而不需要第二個程序集?

我已經通過tlbimp運行foo.idl來生成foo.dll,一個.Net程序集。現在爲了實現我的接口,我可以在我的dll中引用foo.dll來實現接口。

這個效果非常好,只有一個例外:我現在必須分配兩個dll而不是一個dll。這實際上違背了我正在開發的項目的要求:交付一個DLL。

有沒有辦法將tlbimp dll合併到我的,或任何其他方式來做到這一點(在C#中沒有第二個DLL實現COM接口)?

+0

你對此有所反思:只需將接口定義爲C#接口,使用'ComExport'和相關屬性,然後在目標計算機上使用'regasm'來爲COM Interop註冊.NET程序集。 –

回答

3

一個好的反彙編器可以完成的作業,如反射器。您可以簡單地反彙編interop程序集並將生成的C#接口聲明覆制到源代碼中。當然,只有在接口聲明和IID穩定的情況下才應該這樣做。

絕對考慮升級到VS2010。其「嵌入互操作類型」功能允許您在沒有互操作程序集的情況下裝運您的裝配。

+1

* Facepalm *。我正在使用VS2010,我只是不知道「嵌入互操作類型」功能。我現在做,謝謝! – LCC

1

你可能通過使用.tlb而不是'glue'dll來欺騙。

我建議你使用MSVC++/CLR

這可能有,你不能在使用C#的缺點創建混合模式彙編相同的組件。如果您要添加的C#代碼的組合,你或許能擠走的使用

對於其他的,可能是有趣的嚴峻的形勢,思想見我以前的答案:

+0

不幸的是,混合模式程序集不是一個選項。我正在構建的庫是用C#編寫的,結果需要是一個dll。 ILMerge可能是一個選項。 – LCC

相關問題