确认注册的 COM 对象 CoCreateInstance 返回 REGDB_E_CLASSNOTREG
Posted
技术标签:
【中文标题】确认注册的 COM 对象 CoCreateInstance 返回 REGDB_E_CLASSNOTREG【英文标题】:Confirmed Registered COM Object CoCreateInstance returning REGDB_E_CLASSNOTREG 【发布时间】:2015-07-15 18:42:18 【问题描述】:我有一个 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
任何建议
【问题讨论】:
使用 SysInternals 的进程监视器来监视您的程序搜索注册表项。 在我的例子中,我没有为 COM 接口类添加 rgs 文件。 【参考方案1】:好吧,我觉得有点傻。问题是 CComPtr 试图在我正在共同创建的对象上调用 QueryInterface。我正在使用的接口不是由我正在创建的类实现的。似乎会有比 REGDB_E_CLASSNOTREG 更好的错误。恕我直言,E_NOINTERFACE 之类的返回码会更好。
CComPtr<IMyCorrectInterface> ptrMyInterface;
ptrMyInterface.CoCreateInstance(L"ProgID", nullptr, CLSCTX_ALL); // WORKS!!!
【讨论】:
以上是关于确认注册的 COM 对象 CoCreateInstance 返回 REGDB_E_CLASSNOTREG的主要内容,如果未能解决你的问题,请参考以下文章
wps2013中,图表设置时,跳出窗口为“无法创建对象,请确认对象已在系统注册表中注册”。管理员怎么登陆
WPS里面进行公式编辑时出现无法创建对象,请确认对象已在系统注册表里注册 怎么办
WPS里面进行公式编辑时出现无法创建对象,请确认对象已在系统注册表里注册 怎么办