gpt4 book ai didi

c++ - 如何编写具有异步事件触发的 C++ COM 对象(如 VB6 的 Timer 对象)?

转载 作者:行者123 更新时间:2023-11-30 03:43:29 26 4
gpt4 key购买 nike

我正在通过 ReadDirectoryChangesW 为目录更改通知编写一个 C++ COM 对象.我的对象中的一个线程将等待更改,然后通知 VB6 客户端。

我知道如何从我的程序的主线程触发事件,类似于回调函数,但我不想强制用户每隔一小段时间就轮询我的对象以获取更改。

据我所知,我想要的可以通过发送窗口消息来完成,但这需要在 VB6 端进行表单子(monad)类化,这非常复杂。

所以我正在寻找一种方法来编写像 VB6 的 Timer 这样的对象即使 VB6 当前未调用 Timer 的方法,它也可以在 VB6 中触发事件.这可能吗?

最佳答案

COM 事件。

该主题相当费力,它意味着定义事件使用者 (VB) 传递给事件源的“接收器”接口(interface),然后通过调用“接收器”接口(interface)上的方法引发事件。参见 Architecture of Connectable Objects .您必须实现 IConnectionPointContainer .好消息是 IDE 完全了解此模型,并将在 VB 设计器中公开您的事件。在 VB 端,只需双击 COM 对象的“事件”属性面板即可。

至于“异步”部分,这属于您的组件和 VB 主机应用程序的“线程”模型。在单元线程(默认)中,您必须在主单元线程中引发事件,并且您可能必须编码线程之间的接口(interface)。参见 What are the rules for CoMarshalInterface and CoUnmarshalInterface? .

有关从 C++ 服务器到 VB6 客户端的异步 COM 事件触发的详细信息可以在 this article 中找到。 .

关于c++ - 如何编写具有异步事件触发的 C++ COM 对象(如 VB6 的 Timer 对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042463/

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