Qt / C ++中WithEvents VBA的等价物

时间:2013-01-30 07:44:49

标签: c++ qt vba com activex

我正在将Excel宏移植到Qt / C ++。

此宏使用ActiveX和COM与另一个应用程序(Pulse Labshop中的Brüel & Kjaer)进行通信。

Excel宏通过WithEvents变量截取Labshop通知。

如何在C ++中实现相同的行为?这里似乎没有Qt信号/插槽机制......

2 个答案:

答案 0 :(得分:0)

WithEvents是VB和VBA中用于调用VB运行时代码的关键字,它使用the COM Connectable Objects architecture完成设置回调机制所需的一切。

您需要阅读此架构及其相关接口IConnectionPoint等;在C ++代码中实现事件接收器接口;然后添加代码以使用Pulse Labshop的事件源注册您的接收器。

使用一个'magic'关键字完成所有这些工作是VB在当时如此受欢迎的一个很好的理由。

答案 1 :(得分:0)

实际上Qt可以从dll和tlb生成特定的QAxObject。

对于这个项目,供应商给了我一个tlb文件。

在专业档案中:

TYPELIBS = lib/Pulse.tlb
TYPELIBS = $$system( dumpcpp lib/Pulse.tlb -nometaobject -o src/controller/Pulse )

然后生成一个Pulse.h文件。这些类有插槽和信号。因此拦截事件很容易。

之所以不起作用是因为Pulse Labshop许可证已过期。