我在BHO中使用DispEventAdvise
来捕获特定复选框的onclick
事件。您可以在my previous question中查看代码(尽管它并不相关)。
为了以后可以调用DispEventUnadvise
,我保留了对复选框的IHTMLElement
对象的引用。
DispEventUnadvise
?有没有办法知道复选框何时消失? IHTMLElement
对象的引用甚至合法吗?我的意思是,当页面被破坏时,仍然有对该复选框对象的引用,它会发生什么? 最佳答案
当您不再希望接收事件时,应该从事件源/连接点取消建议。该调用尤其使连接点释放您的接收器接口(interface)指针。取消建议之前,连接点将保留一个引用并延长接收器对象的寿命。
也就是说,您可以随时选择退出,除了一般注意事项外,没有任何具体的好时机。
然而,问题“复选框何时消失”的另一部分则没有直接关系。连接到连接点时,您不会收到“离开”通知。即使整个页面都消失了,也要保持接口(interface)指针是合法的:该复选框(单独或与其所有者一起)将保持终止状态,直到释放所有外部引用(包括您的引用)为止。作为安全终止的一部分,当页面/文档消失时,它可能会从其侧面剥离连接点连接,因为将不会发生任何事件,并且文档会进行完整性清理,以避免循环引用和泄漏。
对于您而言,我想您最好的出路是找到另一个合适的事件,以查看整个文档何时消失,并假定复选框也消失了。另一个[较不安全]的选择是监视您的接收器接口(interface)对象:一旦连接点意外释放了它的外部引用,这意味着其清理和复选框将消失。
关于c++ - 建议HTML控件:何时应调用DispEventUnadvise?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21110352/