gpt4 book ai didi

c++ - CoCreateInstance 在一台 PC 中返回 E_NOINTERFACE

转载 作者:行者123 更新时间:2023-11-28 05:46:06 24 4
gpt4 key购买 nike

我正在使用 CoCreateInstance 函数创建与指定 CLSID 关联的类的单个对象。它返回 E_NOINTERFACE。

我检查了注册表,CLSID 是正确的。被调用对象dll的路径在注册表中是正确的,ThreadingModelApartment。此外,对接口(interface)标识符的引用是正确的。

新创建的对象上下文参数是CLSCTX_INPROC_SERVER

虽然此函数调用在一台 PC 上有效,但在另一台 PC 上无效。我尝试再次使用regsvr32注册dll,但仍未解决问题。

问题的原因可能是什么?

最佳答案

最可能的原因 — 32/64 位不兼容,即您试图在 64 位应用程序中创建 32 位进程内 COM 对象,反之亦然。请注意,regsvr32 也是平台相关的,在 Win64 上,C:\Windows\SysWOW64\regsvr32.exe 中还有一个用于在 64 位 Windows 上注册 32 位 COM 服务器。

另一个可能的原因——不兼容的线程模型。 Read this for explanation .

更新:另一个可能的原因是对象内部可能使用了其他一些 COM 对象,并且该依赖的 COM 对象未注册,或者版本错误。在出现故障的 PC 上使用 SysInternals Process Monitor 查看您的客户端应用程序在 CreateInstance 因 E_NOINTERFACE 失败之前立即尝试打开哪些文件/注册表项。和/或在它工作的 PC 上使用 Process Explorer,并查看作为 CreateInstance 调用的结果加载了哪些 DLL。

关于c++ - CoCreateInstance 在一台 PC 中返回 E_NOINTERFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36171460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com