我正在尝试使用以下命令注册我的 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 文件和相同的属性。
非托管 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 的更多信息。