2

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

CLSCTX_LOCAL_SERVERCoCreateInstance调用中使用,并在注册表项中添加了一个空DllSurrogate键,AppId以告诉 COM 在 DllHost 中托管服务器。我已经regsvr32 myproxy.dll从提升的提示中调用以注册代理,没有错误。我在注册表中看到注册表ProxyStubClsid32的 64 位部分中有我的接口的键。

CoCreateInstance这样称呼:

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

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

请注意,如果我请求CoCreateInstance返回,它会告诉我该组件已正确注册。S_OKIUnknown

如何让 COM 加载代理 DLL?

4

1 回答 1

1

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

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

于 2013-10-09T12:03:35.257 回答