我正在将Excel宏移植到Qt / C ++。
此宏使用ActiveX和COM与另一个应用程序(Pulse Labshop中的Brüel & Kjaer)进行通信。
Excel宏通过WithEvents
变量截取Labshop通知。
如何在C ++中实现相同的行为?这里似乎没有Qt信号/插槽机制......
答案 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许可证已过期。