我用vc6。0中的ATL作了一个com(接口派生自IDispatch)。
我想每当我的com接受到下面传来的数据时,给com的调用程序发送一个消息或者产生一个事件,让com的调用程序调用相应的com接口函数,来得到数据。com应该如何发送消息或产生事件才能让com的调用程序接收到。请指教。最好写一段代码解释一下,谢谢。

解决方案 »

  1.   

    直接调用::PostMessage(HWND_BROADCAST, WM_USER+1, 0, 0);
    在调用程序处需要接收WM_USER+1消息。
    不知道这样是不是你希望的......或者,你可以用连接点来实现,但是需要在你生成com的时候选择支持连接点才行......
    连接点的代码可以看看《ATL Internals》第11章的配套代码
      

  2.   

    用连接点实现,原理就像应用程序向COM注册回调函数一样。消息、事件作为回调函数的参数。
      

  3.   

    我还是介绍一下我的com我用vc6.0的atl向导创建了一个com.我的com的用途是用来进行数据解析.我的com通过CAN总线接收数据.然后将接收的数据进行解析,解析成我们能识别的数据.解析完成后,com发送一个消息或者产生一个事件,让调用com的程序接受到事件或者消息后,调用com接口中的一个函数,将com解析完的数据取走.
    具体的流程就是下位机数据->CAN总线传输->COM收到数据->COM解析数据->COM发送消息或者产生事件->调用COM程序收到消息或事件->调用COM程序调用COM的一个接口函数取得数据.这个流程是在不停的执行.我该如何发送消息和产生事件.谢谢.
      

  4.   

    连接点是由COM组件调用的,而实现是在调用端。
    如你所述,你的COM组件解析完数据后,调用连接点,比如:NotifyClient(),而这个函数的实现是在调用COM的程序中,然后你在这个函数中调用COM接口,取得数据,就OK了连接点的例子我已经说了,你可以看《ATL Internals》第11章的配套代码
      

  5.   

    你可以看看这个:
    http://www.codeguru.com/Cpp/COM-Tech/atl/atl/article.php/c3623/