【发布时间】:2017-06-09 14:28:52
【问题描述】:
这是我的问题。
我在 Visual Studio 2015 (MyLibrary) 下用 VB.NET 编写了一个类。 我将其编译为 DLL,并选中了 'Make assembly COM-Visible',因此它除了 DLL 文件之外还会生成一个 .tlb 文件。
然后我尝试在 Visual Studio 2013 下使用 COM 机制在 C++ 代码中实例化这个类。 为此,我制作了由 .tlh 生成的文件:
#import "MyLibrary.tlb" raw_interfaces_only
然后我做:
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
cMyLibraryPtr l_pclMyLibrary(__uuidof(MyLibrary));
// Use it
l_pclMyLibrary->DoThings();
当我从安装了两个版本的 Visual Studio 的计算机上执行此操作时,它运行良好,无论是在调试模式还是发布模式下。 但是,当我从另一台“安装”我的软件的计算机上启动它时,当我的类的构造函数调用“CreateInstance”时,我会得到 REGDB_E_CLASSNOTREG。
我已经检查或尝试了这些方法以使其正常工作:
- 一切都在 x86(VB.NET 和 C++)中编译,我在两个 32 位目标上
- 我尝试通过调用“regasm.exe MyLibrary.dll”来注册我的库。我在 regedit 中检查了注册是否有效。
我不知道我还能做什么......所以欢迎任何帮助!
谢谢 亚历克斯。
【问题讨论】:
-
显示您使用的 exact regasm 命令,包括所有指定的选项。