是否可以通过COM对象进行通信?

时间:2009-08-22 18:58:09

标签: com interprocess

2个exes是否可以通过COM(ActiveX?)界面进行通信? COM DLL可以协调两个单独进程之间的数据共享吗?

6 个答案:

答案 0 :(得分:1)

如果您想在两个流程之间进行通信,请使用named pipe

(可以调用远程COM对象并以这种方式共享数据,但它不必要地复杂。)

答案 1 :(得分:1)

显然,你的问题的答案是肯定的。

后续行动是:

  1. 您为什么要共享数据?你想达到什么目的?数据是什么样的?你是否需要编组复杂的结构并进行复杂的RPC调用,或者你只是在内存中有大量数据并且你想让两个人聚在一起?
  2. 为什么你认为COM是最好的方法呢?您是否考虑过发送窗口消息,或使用命名管道(由@avakar建议),或者使用带有命名互斥锁的共享内存?
  3. #1的答案将通知#2。

    但是我们说COM是最适合您的解决方案。如果进程A中有一些想要在进程B中执行某些操作的代码,则在b.exe中注册COM对象,然后处理A CoCreateInstance()对象。 COM将启动b.exe,创建传递给CoCreateInstance()的CLSID指定的对象,然后为您在CoCreateInstance()的IID参数中请求的指定接口提供poitner。现在,您可以从进程A调用进程B中对象的方法。

    如果您有其他问题或说明,请随时跟进。

    COM将为您整理基本数据类型(基本上是VARIANT支持的所有内容)。

答案 2 :(得分:0)

您可以查看Sharing the CoffeeMonitor以获取用VB6编写的简单示例。这可能对于n路通信最有用,而不是简单的一对一场景。

另一种方法可能是使用Mailslots,与命名管道不同,它可以以类似于UDP广播的方式使用广播。

答案 3 :(得分:0)

  

是否可以协调两个单独进程之间的数据共享?

警告:该DLL有两个实例,每个进程一个。如果DLL具有/管理数据,则DLL的每个实例都将拥有自己的数据:不会在进程之间共享数据。

可以让2个exes通过com接口进行通信,其中COM接口支持的方法,我不知道,putDatagetData,但我认为您可能希望将此COM对象构建/打包/安装为进程外(*.exe)COM对象,而不是作为进程内*.dll })COM对象。

或者如果你确实使用了DLL,你必须实现它们以应对它们有两个独立的实例:例如它应该使用跨进程互斥体而不是进程内关键部分,并交叉处理共享内存而不是进程内私有堆内存。

这可能不是协调数据共享的最佳方式,但它可能是 方式。

答案 4 :(得分:0)

是的,2个exes可以通过COM接口进行通信。

COM客户端和COM服务器可以在同一个进程中 在同一台计算机上或两台上有两个独立的进程 不同的电脑。

答案 5 :(得分:0)

DCOM(分布式COM)是与在单独进程(甚至是机器)中运行的COM对象进行通信的技术。虽然如果你详细说明你的场景会有所帮助,但你可能会有更好的选择。