在类型库中注册dll而不是在类型库文件(TBL)中注册

时间:2013-08-27 14:00:11

标签: c# dll typelib

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

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

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

OLE/COM Object Viewer的屏幕截图:

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:1)

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

这通常不是从[ComVisible] .NET代码创建的COM服务器的方式,它们不是以相同的方式构建的。一个非常有问题的部分是,在构建DLL之后 之前,你无法获得类型库,这是一个鸡与蛋的问题。

这不是不可能,您当然可以运行rc.exe并获取嵌入了/ win32res编译器选项的.res文件。还在IDE中从Project + Properties,Application选项卡,Resource File单选按钮公开。但是,您无需从构建系统中获得任何帮助,您必须在两个单独的步骤中构建DLL。首先获取创建的类型库,再次嵌入它。如果你知道如何编写资源脚本,熟悉运行Windows SDK命令行工具并使你的DLL非常稳定,那么你就不必考虑这个问题,因此你不必重复这样做。有关在this answer中运行rc.exe的更多信息。