Я портирую макрос Excel на Qt / C ++.
Этот макрос использует ActiveX и COM для связи с другим приложением (Pulse Labshop от Брюль & Каджаер).
Макрос Excel перехватывает уведомление Labshop через WithEvents
переменная.
Как я могу реализовать такое же поведение в C ++? Механизм сигнала / слота Qt здесь не представляется возможным …
WithEvents
это ключевое слово, используемое в VB и VBA для вызова кода во время выполнения VB, который делает все необходимое для настройки механизма обратного вызова, используя архитектура COM-объектов.
Вы должны прочитать об этой архитектуре и связанных с ней интерфейсах IConnectionPoint
, так далее; реализовать интерфейс приемника событий в вашем коде C ++; а затем добавьте код, чтобы зарегистрировать свой приемник в источнике событий Pulse Labshop.
Вся эта работа, выполненная с помощью одного «волшебного» ключевого слова, является одной из причин, почему VB был настолько популярен в свое время.
На самом деле Qt может генерировать конкретный QAxObject из dll и tlb.
Для этого проекта поставщик дал мне файл tlb.
В файле pro:
TYPELIBS = lib/Pulse.tlb
TYPELIBS = $$system( dumpcpp lib/Pulse.tlb -nometaobject -o src/controller/Pulse )
Затем создается файл Pulse.h. У классов есть слоты и сигналы. Так что легко перехватывать события.
Причина, по которой это не сработало, заключалась в том, что срок действия лицензии на Pulse Labshop истек.