2

我正在尝试使用以下命令注册我的 DLL:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727>RegAsm.exe /tlb d:\Certificate\d
igicorp\certificate.dll

我正在使用x64机器。它在类型库文件下注册。

截图OLE/COM Object Viewer

在此处输入图像描述

我希望我的 dll 注册如下所示,它指向 dll 文件和相同的属性。

在此处输入图像描述

4

1 回答 1

1

非托管 COM 服务器确实经常将其类型库嵌入为非托管资源。构建链描述 COM 接口和 coclass 的 IDL 文件开始,由 midl.exe 工具编译以生成类型库。然后 rc.exe 资源编译器将包含 TYPELIB 条目的 .rc 资源脚本编译到 .res 文件中。然后链接器将其嵌入到 DLL 中。

对于从 [ComVisible] .NET 代码创建的 COM 服务器,通常不会采用这种方式,它们的构建方式不同。一个非常有问题的部分是在构建 DLL之后才能获得类型库,这是一个先有鸡还是先有蛋的问题。

这并非不可能,您当然可以运行 rc.exe 并获得嵌入 /win32res 编译器选项的 .res 文件。还在 IDE 中从 Project + Properties、Application 选项卡、Resource File 单选按钮公开。但是,您根本无法从构建系统中获得任何帮助,您基本上必须分两个单独的步骤来构建 DLL。首先创建类型库,然后再次嵌入它。仅当您知道如何编写资源脚本、熟悉运行 Windows SDK 命令行工具并让您的 DLL 达到非常稳定的程度时才考虑这一点,因此您不必重复执行此操作。有关在此答案中运行 rc.exe 的更多信息。

于 2013-08-27T15:20:31.210 回答