现在已经使用COM实现了进程间的数据共享
但事件传递尚未实现,想要的效果是:
假如有COM组件N,进程A和B中都使用了N,如果A的某项操作引发了一个信号M,那么希望进程B中可以接受到信号M。
现在根据使用连接点的方法已经可以实现进程内部的信号发送和接受,关键是如何跨进程,对于消息队列、管道、SendMessage以及Local Socket等方法本帖不做导论。
感谢各位提供思路和方法,希望您的帮助能解决我的难题,谢谢!

解决方案 »

  1.   

    使用com时,是通过在里面的类厂用内在申请的方法如new来进行对象类的生成的,再通过这个申请的类返回一个指针接口的,所以,每个创建组件的同一进程或者是不同进程里得到的组件都是相互独立的,所以,你想让进程A和B中使用的N来通过com事件通信,应该是不行的了。得用进程间通信方式
      

  2.   


    那是不是类厂对每个客户端进程都会生成一个COM对象?
      

  3.   

    com与跨进程好像没什么关系的。楼主为什么不用进程间通信呢
      

  4.   


    因为COM可以使用数据共享区段的方式做到跨进程的数据共享,由此特性觉得COM也可以做到跨进程的消息事件传递,如果真的可以就不用再额外实现进程间通信了。
      

  5.   

    使用数据共享区段跟跨进程的消息事件传递没有联系的,这里你可以把com当作dll来看
      

  6.   

    http://www.kuaipan.cn/file/id_20230498555002883.html
    http://www.kuaipan.cn/file/id_20230498555002881.html
    http://www.kuaipan.cn/file/id_20230498555002882.html
    以上是我用VS2005写的测试程序,MyComTest1里面是COM组件,Caller1里面是用来建立连接点和测试事件接收的,Caller2里面是用来测试进程间的事件接收的。测试事件接收请点击“新建”按钮。哪位高人帮忙看下是不是哪里不对?
      

  7.   

    首先得先了解COM的本质,COM本质就是一个普通的EXE或DLL,只是在上面做了一大堆的约定,你完全可以用一个普通的WIN32 DLL工程做出一个典型的COM。 所以就问题实质上是进程间通信,至于进程间有哪些通信的做法的讨论太多了
      

  8.   


    关于COM的本质我确实不太了解,但是隐约觉得应该是多个进程调用同一COM组件时内存中只会存在一份,如果是这样那就是内存中的一份COM组件可以与多个进程同时通信,那是不是就可以以COM组件为中转来实现进程间通信呢?这是我打算用COM组件实现进程间通信的基本想法,如果哪里有不对的地方还请指正,谢谢!
      

  9.   

    绕了一圈又回到起点,COM本身就依赖进程间通信,怎么会用COM来实现进程间通信呢!!!
    COM跨进程调用是用RPC(远程过程调用)来实现的,你还不如直接用RPC或者你自己说的管道,套接字口等自己封装。顺便说一下,多个进程调用同一COM组件内存只存一份是不正确的,COM组件的加载受好多因素影响,先不说进程内组件,就是进程外组件也不是保证只有一份的,所以说共享数据也是不保险的。