注册代理/存根DLL后,CoCreateInstance仍返回E_NOINTERFACE

时间:2013-10-09 08:59:32

标签: c++ com windows-7-x64

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

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

我这样打电话给CoCreateInstance

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

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

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

如何让COM加载代理DLL?

1 个答案:

答案 0 :(得分:1)

我将不得不通过问题中缺少的信息,唯一真正的领导。您需要两个版本的代理/存根DLL。 64位版本,可以加载到64位客户端,必须由c:\ windows \ system32 \ regsvr32.exe注册。还有一个32位版本,可以加载到代理进程中,必须由c:\ windwos \ syswow64 \ regsvr32.exe注册。在问题中没有证据证明后一步骤得到了解决。

如果这没有帮助,那么从SysInternals的ProcMon获取诊断信息。您应该看到它搜索注册表项以及DLL并在其中失败。

相关问题