ExcelマクロをQt/C++に移植しています。
このマクロは、ActiveXとCOMを使用して、別のアプリケーション( Brüel &KjaerのPulse Labshop)と通信します。
Excelマクロは、変数を介してLabshop通知をインターセプトしWithEvents
ます。
C ++で同じ動作を実装するにはどうすればよいですか?Qt信号/スロットメカニズムはここでは不可能のようです...
WithEvents
は、VBおよびVBAで使用されるキーワードであり、VBランタイムでコードを呼び出し、COM接続可能オブジェクトアーキテクチャを使用してコールバックメカニズムを設定するために必要なすべてのことを実行します。
このアーキテクチャとそれに関連するインターフェイスIConnectionPoint
などについて理解する必要があります。C++コードにイベントシンクインターフェイスを実装します。次に、コードを追加して、シンクをPulseLabshopのイベントソースに登録します。
1つの「magic」キーワードを使用して行われたこのすべての作業は、VBが当時非常に人気があった理由の1つです。
実際、Qtはdllとtlbから特定のQAxObjectを生成できます。
このプロジェクトでは、サプライヤからtlbファイルが提供されました。
プロファイルファイル:
TYPELIBS = lib/Pulse.tlb
TYPELIBS = $$system( dumpcpp lib/Pulse.tlb -nometaobject -o src/controller/Pulse )
次に、Pulse.hファイルが生成されます。クラスにはスロットとシグナルがあります。したがって、イベントを傍受するのは簡単です。
それが機能しなかった理由は、PulseLabshopライセンスの有効期限が切れたためです。