我有一个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
任何建议
答案 0 :(得分:1)
好的,我觉得真的很傻。问题在于CComPtr试图在我正在CoCreating的对象上调用QueryInterface。我正在使用的接口没有由我正在创建的类实现。似乎比REGDB_E_CLASSNOTREG有更好的错误。像E_NOINTERFACE这样的东西会是更好的返回代码恕我直言。
blah.blah.select('/*+ FULL("CREDITRSP") */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0, ...').blah.blah