2

我一直在为需要我生成 .tlb 文件的应用程序创建各种插件。过去,只是将我的项目的构建属性配置为“注册 COM 互操作”,从而生成一个 .tlb 文件以及我的输出 dll。以前,当使用 Visual Studio 2010 安装程序项目模板时,在目标计算机上安装期间,这将始终正确注册 .tlb。

我最近尝试切换到 Visual Studio 2012 并使用 InstallShield LE 项目来生成我的安装程序,但它似乎没有在安装过程中注册类型库,也没有快速添加似乎允许我手动通过 cmd-line regasm 路由注册 - 或者至少对我来说不是那么明显。

在 InstallShield 项目选项中,我必须手动将 .tlb 应用程序文件(来自构建的 \release 文件夹)添加到要包含在安装程序中的文件列表中,因为它似乎没有与生成的文件一起包含项目输出或内容选项。在 .tlb 文件的“COM 和 .Net 设置”属性中,我将其配置为注册类型:“提取 COM 信息”并启用了“COM 互操作”。

我错过了什么?

4

1 回答 1

1

试试这个线程以获得良好的技术描述:Are *.tlb files ever used at runtime?

在大多数情况下,我认为不需要 *.tlb 文件,因为它已经编译到大多数二进制文件中,无论它是 exe 文件还是 dll,但 .NET Interop 要复杂得多,正如另一个线程解释的 *可能需要 .tlb 文件来处理线程和进程之间的高级通信问题——这是我偶然忘记的。

在实施设置时,我从来不需要自己注册 *.tlb 文件,注册相应的二进制文件(exe/dll)就足够了,但这一切都取决于产品的用例。

请注意,据我所知,Installshield注册COM Interop的方式并不总是最好的选择。我不确定他们在做什么,但我会检查并与正常的regasm.exe注册进行比较:http: //msdn.microsoft.com/en-us/library/tzat5yw6 (v=vs.110).aspx . 并仔细阅读链接的线程(Are *.tlb files ever used at runtime?)关于代理、存根和编组的问题,以防您需要支持这些功能。

以下是一些有关COM/DCOM简明信息的进一步链接:

类型库的内容:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms221355 (v=vs.85).aspx

COM、DCOM 和类型库: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa366757 (v=vs.85).aspx

为 COM 接口生成的文件:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa366830 (v=vs.85).aspx

于 2014-02-27T11:32:03.293 回答