2个exe可以通过COM(ActiveX?)接口进行通信吗?COM DLL 可以协调 2 个单独进程之间的数据共享吗?
6 回答
如果要在两个进程之间进行通信,请使用命名管道。
(可以通过这种方式调用远程 COM 对象并共享数据,但它过于复杂。)
显然,您的问题的答案是肯定的。
后续是:
- 为什么要共享数据?你想达到什么目的?数据是什么样的?您是否需要编组复杂的结构并进行复杂的 RPC 调用,或者您是否只是在内存中有大量数据并且您希望两个人一起参与其中?
- 为什么你认为 COM 是最好的方法?您是否考虑过仅发送窗口消息,或使用命名管道(如@avakar 建议的那样),或使用具有命名互斥锁的共享内存?
#1的答案将通知#2。
但是可以说 COM 是最适合您的解决方案。如果进程 A 中有一些代码想要在进程 B 中执行某些操作,则在 b.exe 中注册一个 COM 对象,然后让进程 A CoCreateInstance() 成为该对象。COM 将启动 b.exe,创建由您传递给 CoCreateInstance() 的 CLSID 指定的对象,然后给您一个指向您在 CoCreateInstance() 的 IID 参数中请求的指定接口的指针。现在您可以从进程 A 调用进程 B 中对象的方法。
如果您还有其他问题或澄清,请随时跟进。
COM 将为您编组基本数据类型(基本上是 VARIANT 支持的所有内容)。
DCOM (Distributed COM) 是用于与运行在单独进程(甚至机器)中的 COM 对象进行通信的技术。虽然如果您详细说明您的场景会有所帮助,但对于您正在尝试做的事情可能会有更好的选择。
您可以查看共享 CoffeeMonitor以获得用 VB6 编写的简单示例。不过,这可能对 n 向通信最有用,而不是简单的一对一场景。
另一种方法可能是使用与命名管道不同的Mailslots,它可以以类似于 UDP 广播的方式使用广播。
com dll 可以协调 2 个单独进程之间的数据共享吗?
注意:该 DLL 将有两个实例,每个进程中都有一个。如果 DLL 拥有/管理数据,则 DLL 的每个实例都将拥有自己的数据:这些数据不会在进程之间共享。
2 个 exe可以通过com 接口进行通信,其中 COM 接口支持类似的方法,我不知道,putData
并且getData
,但是我认为您可能希望将此 COM 对象构建/打包/安装为 out-of-进程 ( *.exe
) COM 对象,而不是进程内 ( *.dll
) COM 对象。
或者,如果您确实使用 DLL,则必须实现它们以应对它们的两个单独实例:例如,它应该使用跨进程互斥锁而不是进程内临界区,以及跨进程共享内存而不是 in -进程私有堆内存。
这可能不是协调数据共享的最佳方式,但它可能是一种方式。
是的,两个 exe 可以通过 COM 接口进行通信。
COM 客户端和 COM 服务器可以位于同一进程中,也可以位于同一台计算机上的两个不同进程中,也可以位于两台不同计算机上。