相当于Qt/C++中的WithEvents VBA

Equivalent of WithEvents VBA in Qt/C++

本文关键字:WithEvents VBA 中的 C++ Qt 相当于      更新时间:2023-10-16

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

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

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

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

WithEvents是 VB 和 VBA 中用于调用 VB 运行时中的代码的关键字,该运行时执行使用 COM 可连接对象体系结构设置回调机制所需的一切。

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

所有这些工作都是用一个"魔术"关键词完成的,这是VB在当时如此受欢迎的一个很好的理由。

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

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

在专业文件中:

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

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

它不起作用的原因是Pulse Labshop许可证已过期。