gpt4 book ai didi

c++ - 建议 HTML 控件 : when should I call DispEventUnadvise?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:44 24 4
gpt4 key购买 nike

我在 BHO 中使用 DispEventAdvise 来捕获特定复选框的 onclick 事件。您可以在 my previous question 中查看代码(虽然不是那么相关)。

为了以后能够调用 DispEventUnadvise,我保留了对复选框的 IHTMLElement 对象的引用。

  1. 我应该什么时候调用 DispEventUnadvise?有没有办法知道复选框何时消失?

  2. 保留对 IHTMLElement 对象的引用是否合法?我的意思是,当页面被销毁时,仍然有对该复选框对象的引用,它会发生什么?

最佳答案

当您不想再接收事件时,您应该取消来自事件源/连接点的通知。特别是,该调用使连接点释放您的接收器接口(interface)指针。在取消通知之前,连接点持有一个引用并延长您的接收器对象的生命周期。

也就是说,您可以在想要退出的任何时候调用它,除了一般考虑因素之外,没有具体的合适时间。

然而,问题的另一部分“当复选框消失时”并没有直接关系。连接到连接点后,您不会收到“离开”通知。即使整个页面都消失了,保持接口(interface)指针是合法的:复选框,单独或与其所有者一起,将保持终止状态,直到所有外部引用(包括你的)被释放。作为安全终止的一部分,当页面/文档消失时,它可能会从其一侧剥离连接点连接,因为不会发生任何事件,并且文档正在进行健全性清理以避免循环引用和泄漏。

在你的情况下,我想你最好的出路是找到另一个合适的事件来查看整个文档何时消失并假设复选框也消失了。另一个[不太安全]的选择是观察你的接收器接口(interface)对象:一旦它的外部引用被连接点意外释放,这意味着它正在做的清理和复选框将消失。

关于c++ - 建议 HTML 控件 : when should I call DispEventUnadvise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com