我們通過COM(CCW)在本地C++中使用.NET Assembly DLL。 每當我製作我的DLL的新版本時,我必須將兩個文件(.dll和相應的.tlb)發送給在代碼中使用它的工作組。如何將.tlb作爲資源文件嵌入到.NET Assembly DLL中?
是否有可能將.tlb文件作爲.NET DLL文件中的資源嵌入?
我們通過COM(CCW)在本地C++中使用.NET Assembly DLL。 每當我製作我的DLL的新版本時,我必須將兩個文件(.dll和相應的.tlb)發送給在代碼中使用它的工作組。如何將.tlb作爲資源文件嵌入到.NET Assembly DLL中?
是否有可能將.tlb文件作爲.NET DLL文件中的資源嵌入?
用Visual Studio .NET做這件事並不簡單,但可以完成。在基本級別上,您需要做的是:
生成您的TLB文件,例如「YourLibrary.tlb」。
使用文本編輯器(例如記事本或File/New/File .../Visual Studio中的文本文件)創建名爲「YourLibrary.rc」的Win32資源腳本文件。
在腳本文件,鍵入以下文本逐字(但替換當然實際TLB文件名):
1類型庫「YourLibrary.tlb」
保存腳本文件相同文件夾作爲TLB文件。
從Visual Studio命令提示符,切換到文件夾的腳本文件,並使用以下命令編譯:
RC YourLibrary.rc
,這將產生在同一個Win32資源文件名爲「YourLibrary.res」的文件夾。
在Visual Studio中,右鍵單擊解決方案資源管理器中的項目節點(例如「YourLibrary」),然後選擇屬性。
在應用程序選項卡,在「資源」,選擇「資源文件」選項,並從第5步
保存瀏覽到「YourLibrary.res」文件和重建項目。
TLB現在將作爲資源嵌入到DLL中,以便其他COM應用程序可以讀取它。
如果稍後重新生成TLB文件,則需要重複步驟5以重新編譯資源文件,並在步驟8將新版本嵌入到DLL中。所有這一切,你或許可以通過Build Events或者將自定義的MSBuild目標放到你的項目文件中來實現自動化,但這是一個完整的其他討論。
根據您的回答,我編寫了一個Post-Build事件來自動化構建和嵌入.tlb:http://thoughtandcode.blogspot.ru/2015/05/sole-com-for-you-chapter-3.html – Mikhail 2015-05-09 12:39:42
與下面的答案相同,但來自MSDN:http://msdn.microsoft.com/en-us/library/ww9a897z.aspx – yzorg 2011-10-03 16:03:53