0

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

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

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

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

4

2 回答 2

0

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

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

所有这些工作都是用一个“魔术”关键字完成的,这是 VB 在当时如此受欢迎的一个很好的原因。

于 2013-01-30T21:16:14.080 回答
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 许可证已过期。

于 2013-04-17T12:55:01.413 回答