一个COM事件接口包括3个事件函数,分别是1、2、3
在使用COM组件的客户端程序里分别有两个类a、b类接收这些事件
a接收1、2事件
b接收3事件a可以正常接收但b接不到事件3如果把事件3放到a中来接收(此时b也在接收)则a和b都可以正常接收了
COM组件采用ATL写的
响应客户端是一个MFC的对话框程序,由MFC的方式响应(即AfxConnectionAdvise这组函数写的)
使用VS2003

解决方案 »

  1.   

    跟踪 事件代理 函数1 确定是否都通知了 a 和 b,
    2 确定在事件代理 函数中,在通知时,IUnknown * 是否有效,那个连接点的 cookie 就是 (LONG)IUnknown* 这个很容易跟踪出来的
      

  2.   

    组件是用VC7 ATL建立的简单组件
    时间发出是使用__raise发出的
      

  3.   

    a接收1、2事件
    b接收3事件a可以正常接收但b接不到事件3如果把事件3放到a中来接收(此时b也在接收)则a和b都可以正常接收了这时候b岂不是没有事件接收? 但a却接收3个事件? 这说明什么?说明问题就在b里
      

  4.   

    不好意思,我刚试了一下,在ATL里这样是可以的,当不实现某个事件函数时,相当于空实现并返回S_OK。是不是MFC的实现方法有什么不同?实在不行你可以在a里加一个3的空实现嘛。
      

  5.   

    对,我也怀疑是MFC事件相应的问题,我测试过ATL响应事件的方式,就可以做到我说的,不一定实现所有的事件但我的工程是MFC,又不想为了这个问题再添加一个专门的响应实例,希望看在MFC的响应方式总找到解决方法
      

  6.   

    这应当是你的事件接收器代码有问题"AfxConnectionAdvise"必须被使用2次,以确保a和b事件接收器同时都能与服务器的事件连接点联系上。