我对 COM 有一般的了解,并且想了解 COM 如何帮助数据传输。假设有两个进程,进程-A 和进程-B,并且他们都希望彼此共享一些数据,当然有很多 RPC 机制,但我想使用 COM。
以上是我的理解,有没有大佬能帮我理一下这个话题?基本上我想使用 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 ,并将其声明为服务器应用程序。这是完成后您应该看到的内容:
您的 DLL 现在将自动托管在特定进程(著名的
dllhost.exe
)中,该进程将在客户端尝试连接时立即启动。默认情况下,相同的进程将用于各种进程外 COM 客户端。它会在一段时间后关闭,但您可以通过多种方式配置 COM+ 应用程序,例如设置“空闲时保持运行”标志:现在,您将能够为您喜欢的所有 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/