如何使用异步事件触发编写C ++ COM对象(如VB6的Timer对象)?

时间:2016-03-16 17:10:36

标签: c++ asynchronous timer com vb6

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

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

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

所以我正在寻找一种方法来编写像VB6 Timer这样的对象,它可以在VB6中触发一个事件,即使VB6当前没有调用{{ {1}}。这可能吗?

1 个答案:

答案 0 :(得分:2)

COM事件。

这个话题相当费力,它意味着要定义一个“接收器”。事件使用者(VB)传递给事件源的接口,然后通过调用'沉没'上的方法来引发事件。接口。见Architecture of Connectable Objects。您必须实施IConnectionPointContainer。好消息是IDE完全了解这个模型,并将在VB设计器中公开您的事件。从VB方面来说,就像双击COM对象'事件一样简单。物业小组。

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

有关从C ++服务器到VB6客户端的异步COM事件触发的详细信息,请参见this article