我已经使用 Visual Studio 2013 创建了一个带有 COM 接口的 c++ DLL。DLL get 与注册一起安装。在 Ole Object Viewer 中,我可以看到这个 DLL 的类型库以及所有导出的函数。regsvr32 完成,没有任何错误。
就在 C# 中我不能使用,因为创建失败并出现错误 0x80040154 - 找不到或未注册类。
这不是平台问题。64 位版本在 system32 中,32 位版本在 syswow64 中,它们在那里注册,并且 OLE 对象查看器中的类型库信息证实了这一点。
但该类未列在 OLE 对象查看器树中。
Habe 不知道有什么遗漏或错误。
此外,我有一个类似的 VC++ 项目,这个 COM/DLL 可以在 OLE 对象查看器的视图中看到。它以完全相同的方式编译、链接和安装。
我已经比较了所有编译器、链接器和 MIDL 设置,检查了项目中的 .idl 文件、.rgs 文件……除了名称和 guid 不同之外,所有这些似乎都是相同的。
所以很奇怪:一个在OLE对象查看器的树中显示为COM对象,可以在C#程序中使用,另一个不能。
请注意:使用此 DLL/COM 的 C# 项目中没有编译器错误。创建 0x80040154 时出现运行时错误。
总结:我要COM/DLL,两个visual studion项目,部署方式相同,一个可以在OLE对象树中看到,可以在C#中使用,另一个不能。
有没有我可以检查的关键点以及成功列为 OLE COM 对象所需的关键点?
PS:唯一的区别是类型库视图中指示的 MSIL 编译器版本:好的 COM/DLL 有 MSIL 7.xxx 坏的 8.xxx 但我根本不知道选择的 MSIL 编译器在哪里。DLL/COM 均由 VS2013 构建