我有一个控件,如果数据变了,就发出一个数据变化事件,这样VB就可以响应这个事件。

解决方案 »

  1.   

    1、如果用VB,简单直接在类向导中添加事件,然后在需要的地方Raise即可
    2、如果用VC+ATL,而现有的组件没有支持连接点(IConnectionPoint)的话,有点麻烦,需要手动添加。方法(可能比较苯,但我相不到其他更好的方法):新建一个接口,支持IConnectionPoint;实现连接点;然后找出与连接点有关的代码(包括IDL,.H.CPP)手动添加到现有接口中,然后删除新加的接口。或干脆新建一个接口,支持IConnectionPoint,实现,然后实现想提供的所有功能,最后放弃原接口。
      

  2.   

    假定:在COM部分,包含事件的接口叫ISth,添加方法(就是事件)叫SthHappened,当然可以添加更多的。
    1、当你实现了连接点后,系统会生成一段类代码,应该叫CProxy_ISthEvents,其中有一个方法,叫Fire_SthHappened() 。当然这个方法可以有参数。
    2、在你需要的时候和地点,调用Fire_SthHappened() 在调用COM的部分(客户端),首先必须“订阅事件”,然后必须实现事件的“响应代码”。即,由于某种原因,系统事件被触发,通知到了客户端“SthHappened”,然后客户端响应。说得比较粗,希望有所帮助。如果写细的话可以是一篇文章,我实在没时间,进度太紧!
    可以参考《COM 原理与应用》,潘大虾说的比较清楚。然后再动手!