HRESULT:0x80040154 用于注册的 COM 对象
Posted
技术标签:
【中文标题】HRESULT:0x80040154 用于注册的 COM 对象【英文标题】:HRESULT:0x80040154 for registered COM object 【发布时间】:2013-05-17 01:14:22 【问题描述】:我在调用 COM 对象时遇到了一些问题。
szProgID = Imctrl.Section
HRESULT hr = CLSIDFromProgID(szProgID, &clsid);
执行后,hr = S_OK, clsid = "CLSID_Section Class"。 但是当我尝试创建一个对象时,CoCreateInstance 返回错误:“类未注册”。虽然注册表中存在“Imctrl.Section”。
hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p);
此 dll 中的其他类也出现同样的错误。
【问题讨论】:
可能是 32 位与 64 位的问题? COM 服务器和 COM 客户端必须使用相同的位数(一般)Imctrl.Section
在注册表中只映射到 CLSID,然后 CLSID 映射到实际的服务器实现,然后它必须存在。总而言之,这要么是您尝试实例化错误事物的问题,要么服务器不只是注册/可用(包括 32/64 可能的原因)。
【参考方案1】:
该问题与 32 位与 64 位无关。 使用实用软件“depends.exe”我发现这个DLL依赖于一些第三方DLL,它不允许访问该对象。
【讨论】:
以上是关于HRESULT:0x80040154 用于注册的 COM 对象的主要内容,如果未能解决你的问题,请参考以下文章
没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))