同时支持32位和64位客户端的进程外COM服务器

5
我有一个运行在64位机器上的64位进程外COM服务器。我使用regsvr32.exe在我的C:\Windows\System32文件夹中注册了64位代理/存根DLL,并且可以运行64位客户端。我还在C:\Windows\SysWOW64文件夹中注册了32位代理/存根,我可以运行32位客户端。我可以同时运行多个32位客户端和多个64位客户端。然而,如果我尝试先运行32位客户端,然后再运行64位客户端,第二个客户端会尝试创建一个新的Server.exe进程(如果我从64位客户端开始也是一样)。难道它们不应该只使用同一个Server实例吗?
这是我的Server CoCreateInstanceEx调用:
HRESULT hr = CoCreateInstanceEx(CLSID_COMServerObject, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, NULL, 1, &qi);

我的客户端 CoCreateInstanceEx 调用都长这样:
hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, NULL, 1, &qi);

非常感谢任何帮助。


你从未提到服务器的作用,这很重要。它传递给CoRegisterClassObject()的REGCLS非常重要。 - Hans Passant
1
哦,对不起...我正在使用 ATL,它正在调用:hr = pT->RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED); - darkrock76
服务器正在连接输入设备并向所有客户端发送更新。 - darkrock76
这不是我在COM中遇到的错误。64位客户端以管理员身份运行,而32位客户端则没有。强制32位客户端也以管理员身份运行解决了问题。 - darkrock76
1个回答

4

64位客户端正在以管理员身份运行,而32位客户端没有。强制32位客户端也以管理员身份运行解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接