2009-01-06 65 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