这是我的问题。
我在Visual Studio 2015( MyLibrary )下用VB.NET编写了一个类。 我将其编译为DLL,并使用'使程序集COM-Visible' 进行检查,因此除了DLL文件外,它还会生成一个.tlb文件。
然后我尝试使用COM机制在Visual Studio 2013下用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的计算机上执行此操作时,它在调试或发布模式下运行良好。 但是,当我从另一台我安装的计算机上启动时,#34;我的软件,当我的类的构造函数调用" CreateInstance "
时,我得到 REGDB_E_CLASSNOTREG我已经检查过或试过这些东西让它发挥作用:
我不知道我能做些什么......所以欢迎任何帮助!
由于 亚历克斯。
答案 0 :(得分:1)
我运气好了:
regasm /tlb /codebase MyLibrary.dll
注意/ tlb和/ codebase参数......
我还想确保从具有管理员权限的提升命令行运行它。
此外,您需要确保您使用的regasm.exe版本是
1)构建DLL的相同版本的.NET 2)在您的情况下,它是32位版本的regasm.exe而不是64位版本
另一方面,如果您要在同一个安装目录中分发这些内容,则可以使用Isolated COM,这样就不需要注册。