具有同步 32 位和 64 位客户端的进程外 COM 服务器

dar*_*k76 5 c++ com

我有一个在 64 位机器上运行的 64 位进程外 COM 服务器。我在我的C:\Windows\System32文件夹中使用 regsvr32.exe 注册了我的 64 位代理/存根 DLL,并且可以运行我的 64 位客户端。我还在C:\Windows\SysWOW64文件夹中注册了我的 32 位代理/存根,我可以运行我的 32 位客户端。我还可以同时运行多个 32 位客户端和多个 64 位客户端。但是,如果我尝试先运行 32 位客户端,然后运行 ​​64 位客户端,则第二个客户端会尝试创建一个新的 Server.exe 进程(如果我从 64 位客户端开始,也会发生同样的情况)。他们不应该都只使用相同的 Server 实例吗?

这是我的服务器CoCreateInstanceEx调用:

HRESULT hr = CoCreateInstanceEx(CLSID_COMServerObject, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, NULL, 1, &qi);
Run Code Online (Sandbox Code Playgroud)

我的两个客户端CoCreateInstanceEx调用都如下所示:

hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER, NULL, 1, &qi);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

dar*_*k76 4

64 位客户端以管理员身份运行,而 32 位客户端则不然。强制 32 位客户端也以管理员身份运行解决了该问题