REGDB_E_CLASSNOTREG from VB.NET to C++
REGDB_E_CLASSNOTREG from VB.NET to C++
这是我的问题。
我在Visual Studio 2015下用VB.NET编写了一个类(MyLibrary)。我将其编译为DLL,并选中"使程序集COM可见",因此除了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。
我已经检查或尝试过这些东西来让它发挥作用:
- Everything是在x86(VB.NET和C++)中编译的,我有两个32位的目标
- 我试图通过调用"regasm.exe MyLibrary.dll"来注册我的库。我在regedit中检查了注册是否有效
我不知道我还能做些什么。。。所以欢迎任何帮助!
谢谢亚历克斯。
我在使用时运气更好
regasm /tlb /codebase MyLibrary.dll
请注意/tlb和/codebase参数。。。
我还想确保您从具有管理员权限的提升命令行运行它。
此外,您需要确保您使用的regasm.exe版本是
1) 与您构建DLL的.NET版本相同2) 在您的情况下,它是regasm.exe的32位版本,而不是64位版本的
另一件事是,如果你要在同一个安装目录中分发这些,你可以使用隔离COM,这样就不需要注册了。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- REGDB_E_CLASSNOTREG from VB.NET to C++
- C++ library to asp.net
- C++ dll variable to vb.net exe
- c++ to VB.Net IntPtr Strings
- vb.net byte[] to C++ char*