2009-01-06 68 views
13

我們通過COM(CCW)在本地C++中使用.NET Assembly DLL。 每當我製作我的DLL的新版本時,我必須將兩個文件(.dll和相應的.tlb)發送給在代碼中使用它的工作組。如何將.tlb作爲資源文件嵌入到.NET Assembly DLL中?

是否有可能將.tlb文件作爲.NET DLL文件中的資源嵌入?

+1

與下面的答案相同,但來自MSDN:http://msdn.microsoft.com/en-us/library/ww9a897z.aspx – yzorg 2011-10-03 16:03:53

回答

11

用Visual Studio .NET做這件事並不簡單,但可以完成。在基本級別上,您需要做的是:

  1. 生成您的TLB文件,例如「YourLibrary.tlb」。

  2. 使用文本編輯器(例如記事本或File/New/File .../Visual Studio中的文本文件)創建名爲「YourLibrary.rc」的Win32資源腳本文件。

  3. 在腳本文件,鍵入以下文本逐字(但替換當然實際TLB文件名):

    1類型庫「YourLibrary.tlb」

  4. 保存腳本文件相同文件夾作爲TLB文件。

  5. 從Visual Studio命令提示符,切換到文件夾的腳本文件,並使用以下命令編譯:

    RC YourLibrary.rc

    ,這將產生在同一個Win32資源文件名爲「YourLibrary.res」的文件夾。

  6. 在Visual Studio中,右鍵單擊解決方案資源管理器中的項目節點(例如「YourLibrary」),然後選擇屬性。

  7. 在應用程序選項卡,在「資源」,選擇「資源文件」選項,並從第5步

  8. 保存瀏覽到「YourLibrary.res」文件和重建項目。

TLB現在將作爲資源嵌入到DLL中,以便其他COM應用程序可以讀取它。

如果稍後重新生成TLB文件,則需要重複步驟5以重新編譯資源文件,並在步驟8將新版本嵌入到DLL中。所有這一切,你或許可以通過Build Events或者將自定義的MSBuild目標放到你的項目文件中來實現自動化,但這是一個完整的其他討論。

+0

根據您的回答,我編寫了一個Post-Build事件來自動化構建和嵌入.tlb:http://thoughtandcode.blogspot.ru/2015/05/sole-com-for-you-chapter-3.html – Mikhail 2015-05-09 12:39:42