确认已注册的COM对象CoCreateInstance返回REGDB_E_CLASSNOTREG

时间:2015-05-05 20:48:43

标签: c++ com atl

我有一个ATL DLL,我试图从ATL Exe消耗。当我尝试在DLL中创建对象的实例时,它失败并出现错误REGDB_E_CLASSNOTREG。我已经检查了注册表,我可以看到对象已注册,包括ProgID和CLSID。

CComPtr<IMyInterface> ptrMyInterface;
ptrMyInterface.CoCreateInstance(L"ProgID", nullptr, CLSCTX_ALL); // Fails

CLSID myClsid;
CLSIDFromString(L"{MyCLSID}"), &myClsid);  // Correctly looks up the CLSID
ptrMyInterface.CoCreateInstance(myClsid, nullptr, CLSCTX_ALL); // Also fails

任何建议

1 个答案:

答案 0 :(得分:1)

好的,我觉得真的很傻。问题在于CComPtr试图在我正在CoCreating的对象上调用QueryInterface。我正在使用的接口没有由我正在创建的类实现。似乎比REGDB_E_CLASSNOTREG有更好的错误。像E_NOINTERFACE这样的东西会是更好的返回代码恕我直言。

blah.blah.select('/*+ FULL("CREDITRSP") */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0, ...').blah.blah
相关问题