【问题标题】:Equivalent of WithEvents VBA in Qt/C++Qt/C++ 中 WithEvents VBA 的等价物
【发布时间】:2013-01-13 23:15:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ qt vba com activex


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。这是一个好的开始。你有这个解决方案的实现示例吗?
    【解决方案2】:

    其实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-06-13
      • 1970-01-01
      • 2020-09-14
      • 2013-12-19
      • 1970-01-01
      • 2011-04-02
      • 2021-10-15
      • 2013-10-20
      • 2011-04-10
      相关资源
      最近更新 更多