现在已经使用COM实现了进程间的数据共享
但事件传递尚未实现,想要的效果是:
假如有COM组件N,进程A和B中都使用了N,如果A的某项操作引发了一个信号M,那么希望进程B中可以接受到信号M。
现在根据使用连接点的方法已经可以实现进程内部的信号发送和接受,关键是如何跨进程,对于消息队列、管道、SendMessage以及Local Socket等方法本帖不做导论。
感谢各位提供思路和方法,希望您的帮助能解决我的难题,谢谢!
但事件传递尚未实现,想要的效果是:
假如有COM组件N,进程A和B中都使用了N,如果A的某项操作引发了一个信号M,那么希望进程B中可以接受到信号M。
现在根据使用连接点的方法已经可以实现进程内部的信号发送和接受,关键是如何跨进程,对于消息队列、管道、SendMessage以及Local Socket等方法本帖不做导论。
感谢各位提供思路和方法,希望您的帮助能解决我的难题,谢谢!
那是不是类厂对每个客户端进程都会生成一个COM对象?
因为COM可以使用数据共享区段的方式做到跨进程的数据共享,由此特性觉得COM也可以做到跨进程的消息事件传递,如果真的可以就不用再额外实现进程间通信了。
http://www.kuaipan.cn/file/id_20230498555002881.html
http://www.kuaipan.cn/file/id_20230498555002882.html
以上是我用VS2005写的测试程序,MyComTest1里面是COM组件,Caller1里面是用来建立连接点和测试事件接收的,Caller2里面是用来测试进程间的事件接收的。测试事件接收请点击“新建”按钮。哪位高人帮忙看下是不是哪里不对?
关于COM的本质我确实不太了解,但是隐约觉得应该是多个进程调用同一COM组件时内存中只会存在一份,如果是这样那就是内存中的一份COM组件可以与多个进程同时通信,那是不是就可以以COM组件为中转来实现进程间通信呢?这是我打算用COM组件实现进程间通信的基本想法,如果哪里有不对的地方还请指正,谢谢!
COM跨进程调用是用RPC(远程过程调用)来实现的,你还不如直接用RPC或者你自己说的管道,套接字口等自己封装。顺便说一下,多个进程调用同一COM组件内存只存一份是不正确的,COM组件的加载受好多因素影响,先不说进程内组件,就是进程外组件也不是保证只有一份的,所以说共享数据也是不保险的。