Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C#COM dll在C+中存在REGDB#E#u CLASSNOTREG错误+;项目_C++_C# 4.0_Com Interop - Fatal编程技术网

C++ C#COM dll在C+中存在REGDB#E#u CLASSNOTREG错误+;项目

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#dll,我已经为COM互操作正确注册,并使COM可见。使用cppbuilder,我导入了生成包装类的类型库,现在我正试图使用它来创建我的C#类的实例。不过,我在C++代码中得到了ReqBuffeCythNoTeTrg错误。我验证了dll是否在注册表中,甚至向regasm重新注册了它。没有变化。我会错过什么

这是我的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。