C++ C#COM dll在C+中存在REGDB#E#u CLASSNOTREG错误+;项目
我有一个C#dll,我已经为COM互操作正确注册,并使COM可见。使用cppbuilder,我导入了生成包装类的类型库,现在我正试图使用它来创建我的C#类的实例。不过,我在C++代码中得到了ReqBuffeCythNoTeTrg错误。我验证了dll是否在注册表中,甚至向regasm重新注册了它。没有变化。我会错过什么C++ C#COM dll在C+中存在REGDB#E#u CLASSNOTREG错误+;项目,c++,c#-4.0,com-interop,C++,C# 4.0,Com Interop,我有一个C#dll,我已经为COM互操作正确注册,并使COM可见。使用cppbuilder,我导入了生成包装类的类型库,现在我正试图使用它来创建我的C#类的实例。不过,我在C++代码中得到了ReqBuffeCythNoTeTrg错误。我验证了dll是否在注册表中,甚至向regasm重新注册了它。没有变化。我会错过什么 这是我的C++代码: _MyClassPtr obj; HRESULT hr = obj.CreateInstance(__uuidof(MyClass)); //now hr e
这是我的C++代码:
_MyClassPtr obj;
HRESULT hr = obj.CreateInstance(__uuidof(MyClass));
//now hr equals REGDB_E_CLASSNOTREG
我也试过这样做:
IMyClass* obj;
HRESULT hr = CoCreateInstance(__uuidof(MyClass), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMyClass), (void**) &obj);
//same result, hr equals REGDB_E_CLASSNOTREG
我在C#应用程序中还有一个附加依赖项。我也注册了COM,没有什么区别,但是没有将它的类型库导入C++项目。
更新:根据下面的注释,我发现CreateInstance正在注册表的以下位置查找类guid:
HKCU\Software\Classes\Wow6432Node\CLSID\{guid}
HKCR\Wow6432Node\CLSID\{guid}
HKCU\Software\Classes\CLSID\{guid}
HKCR\CLSID\{guid}
但是,在注册表中,任何CLSID节点下与我的程序集相关的唯一条目是程序集本身的guid,这当然不同于类或接口的guid
我已经在x86和x64模式下手动运行了regasm,试图获得不同的结果。没有区别。好吧,我找到了可行的方法
IMyClassPtr obj;
HRESULT hr = obj.CreateInstance(CLSID_MyClass);
CLSID_MyCLass是生成的MyCLass_TLB.cpp文件中的guid常量。对类类型使用它而不是uuuidof(…)可以使一切正常工作。NOTREG意味着它没有正确注册。通过SysInternals的ProcMon进行诊断,您将看到它在注册表中搜索guid。感觉它要么是32位对64位的问题,要么是针对所有人注册的问题,要么是针对当前用户的问题。Raymond Chen的灵力告诉我。你的蜘蛛侠感断了,Adam。我检查过了,所有内容都是32位的。我已经安装了,正在尝试通过Process Manager获取更多信息。到目前为止,即使在注册表中查找guid,也看不到它。我可能用的不对,我也有类似的问题。我想尝试您的解决方案,但是编译器找不到CLSID\u MyClass。