描述:
一个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:
这应当是你的事件接收器代码有问题"AfxConnectionAdvise"必须被使用2次,以确保a和b事件接收器同时都能与服务器的事件连接点联系上。
解决方案2:学习...
解决方案3:不好意思,我刚试了一下,在ATL里这样是可以的,当不实现某个事件函数时,相当于空实现并返回S_OK。是不是MFC的实现方法有什么不同?实在不行你可以在a里加一个3的空实现嘛。
解决方案4:一个类实现了事件接口,就要编写事件函数的所有实现,所以不管a,b都应该实现所有事件函数,你这样的设计方法就不对。
解决方案5: a接收1、2事件
b接收3事件
a可以正常接收但b接不到事件3
如果把事件3放到a中来接收(此时b也在接收)则a和b都可以正常接收了
这时候b岂不是没有事件接收? 但a却接收3个事件? 这说明什么?说明问题就在b里
建议把代码贴上来分析一下
关注一下!
解决方案8:byouwenti
解决方案9:检查一下你的组件,分开来一个个测试
解决方案10: 跟踪 事件代理 函数
1 确定是否都通知了 a 和 b,
2 确定在事件代理 函数中,在通知时,IUnknown * 是否有效,那个连接点的 cookie 就是 (LONG)IUnknown*
这个很容易跟踪出来的
估计和你的组件类别有关。
看看套件,希望对你有帮助。
把发送和接收事件的代码贴上来看看吧,你这么光说怎么解决?