gpt4 book ai didi

c++ - CoCreateInstance 在注册代理/ stub DLL 后仍然返回 E_NOINTERFACE

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:01 31 4
gpt4 key购买 nike

我正在尝试从 64 位应用程序创建 32 位 COM 对象。

我在 CoCreateInstance 调用中使用了 CLSCTX_LOCAL_SERVER,并且我向 AppId 添加了一个空的 DllSurrogate 键> 注册表项告诉 COM 在 DllHost 中托管服务器。我从提升的提示中调用了 regsvr32 myproxy.dll 来注册代理,没有错误。我在注册表中看到,在注册表的 64 位部分中,我的界面有 ProxyStubClsid32 键。

我这样调用 CoCreateInstance:

CComPtr<IMyObj> myobj;
HRESULT hr = myobj.CoCreateInstance(CLSID_MyObj, NULL, CLSCTX_LOCAL_SERVER);

这实际上适用于我的开发机器,我可以在 VS 中看到正在加载代理 DLL。但不是在我正在测试的机器上。所以这是一个配置问题。

请注意,如果我请求 IUnknownCoCreateInstance 会返回 S_OK,这告诉我该组件已正确注册。

如何让 COM 加载代理 DLL?

最佳答案

我将不得不根据问题中缺少的信息,唯一真正的线索。您需要两个 代理/ stub DLL 的构建。可以加载到 64 位客户端的 64 位版本,必须通过 c:\windows\system32\regsvr32.exe 注册。以及一个可以加载到代理进程中并且必须由 c:\windwos\syswow64\regsvr32.exe 注册的 32 位版本。问题中没有证据表明后一步已得到处理。

如果这没有帮助,请从 SysInternals 的 ProcMon 获取诊断信息。您应该会看到它在搜索注册表项和 DLL 时失败了。

关于c++ - CoCreateInstance 在注册代理/ stub DLL 后仍然返回 E_NOINTERFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19267392/

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