【问题标题】:Out of Process COM Server with simultaneous 32 and 64 bit clients带有同时 32 位和 64 位客户端的进程外 COM 服务器
【发布时间】:2014-02-23 15:18:51
【问题描述】:

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

这是我的服务器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 非常重要。
  • 哦,对不起...我正在使用 ATL,它正在调用:hr = pT->RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED);
  • 服务器正在连接输入设备并向所有客户端发送更新。
  • 嗯,这不是我使用 COM 时遇到的错误。 64 位客户端以管理员身份运行,而 32 位客户端则没有。强制 32 位客户端也以管理员身份运行解决了这个问题。

标签: c++ com


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2014-07-02
    • 2020-07-07
    • 2019-10-11
    • 2021-09-17
    • 2021-07-31
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多