gpt4 book ai didi

visual-c++ - 如何使用COM在两个进程之间传输数据(用于IPC-进程间通信)

转载 作者:行者123 更新时间:2023-12-04 15:56:25 24 4
gpt4 key购买 nike

我对 COM 有一般的了解,并且想了解 COM 如何帮助数据传输。假设有两个进程,进程-A 和进程-B,并且他们都希望彼此共享一些数据,当然有很多 RPC 机制,但我想使用 COM。

  • 您不能创建 COM dll,因为它会特定于进程并且无法使用
  • 我们可以创建一个单吨 COM EXE 服务器并将结构包装在 COM CoClass 中并将其成员公开为属性然后......不知道如何?

  • 以上是我的理解,有没有大佬能帮我理一下这个话题?基本上我想使用 COM 在两个进程之间共享数据结构

    最佳答案

    COM exe进程外服务器特别难写,但微软已经创建了COM+ Component service来缓解这种情况。

    它包含许多服务,但在这里我们对允许您在进程外代理主机中托管进程内服务器 (DLL) 的应用程序服务感兴趣。

    这很简单,只需编写一个标准的 ATL DLL(或使用您喜欢的任何其他语言/框架)。我建议对接口(interface)使用自动化类型,因此您不需要特殊代理,例如使用如下定义的 IDL 接口(interface):

    interface ISharedMap : IDispatch{
    [id(1)]
    HRESULT PutData([in] BSTR key, [in] VARIANT value);

    [id(2)]
    HRESULT GetData([in] BSTR key, [out, retval] VARIANT *pValue);
    };

    然后创建一个新的 COM+ 应用程序,如下所述: Creating COM+ Applications ,并将其声明为服务器应用程序。这是完成后您应该看到的内容:

    enter image description here

    您的 DLL 现在将自动托管在特定进程(著名的 dllhost.exe)中,该进程将在客户端尝试连接时立即启动。默认情况下,相同的进程将用于各种进程外 COM 客户端。它会在一段时间后关闭,但您可以通过多种方式配置 COM+ 应用程序,例如设置“空闲时保持运行”标志:

    enter image description here

    现在,您将能够为您喜欢的所有 COM 客户端使用跨进程内存缓存,例如,像这样来自一个简单的 javascript .js 代码:
    var map = new ActiveXObject("SharedMap");
    map.PutData("mykey", "mydata")
    var data = map.GetData("mykey")

    注意:缓存的实现留给读者,但它可以重用另一个 COM+ 服务: COM+ Shared Property Manager

    关于visual-c++ - 如何使用COM在两个进程之间传输数据(用于IPC-进程间通信),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096671/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com