Spec-Zone.ru › Qt 5.14

Инструмент dumpcpp (ActiveQt)

Инструмент dumpcpp генерирует пространство имён C++ для библиотеки типов.

Для генерации пространства имён C++ для библиотеки типов, вызовите dumpcpp со следующими параметрами командной строки:

Параметр Результат
input Сгенерировать документацию для input. input может указать файл библиотеки типов, идентификатор библиотеки типов, или CLSID или ProgID объекта
-o file Записывает объявление класса в file.h и информацию о метаобъекте в file.cpp
-n namespace Сгенерировать пространство имён C++ namespace
-nometaobject Не генерировать файл .cpp с информацией о метаобъекте. Метаобъект затем генерируется во время выполнения.
-getfile libid Вывести имя файла для библиотеки типов libid в стандартный вывод
-compat Сгенерировать пространство имён с API, совместимым с dynamicCall
-v Вывести информацию о версии
-h Вывести справку

Запуск инструмента вручную (и, возможно, добавление сгенерированных файлов в систему управления версиями) обычно достаточно, так как библиотеки типов меняются очень редко. Если ваша библиотека типов изменяется часто, то вы можете интегрировать dumpcpp в систему сборки qmake. В файле .pro перечислите используемые библиотеки типов в переменной TYPELIBS:

TEMPLATE = app
TARGET   = qutlook
QT += widgets axcontainer

TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})

Сгенерированное пространство имён будет объявлять все перечисления, а также один подкласс QAxObject для каждого coclass и interface объявленного в библиотеке типов. coclasses, помеченные атрибутом control, будут обернуты подклассом QAxWidget.

Классы, которые оборачивают создаваемые coclasses (т.е. coclasses, которые не помечены как noncreatable), имеют конструктор по умолчанию; это обычно один класс типа Application.

Outlook::Application *outlook = new Outlook::Application;

Все остальные классы могут быть созданы только путём передачи указателя на интерфейс IDispatch в конструктор; эти классы, однако, не должны создаваться явно. Вместо этого используйте соответствующий API уже созданных объектов.

Outlook::_NameSpace *session = outlook->Session();

Все обертки coclass также имеют один конструктор, принимающий класс-обёртку интерфейса для каждого реализованного интерфейса.

Outlook::NameSpace *session = outlook->Session();

Вы должны создать coclasses, чтобы иметь возможность подключаться к сигналам подобъекта. Обратите внимание, что конструктор удаляет объект интерфейса, поэтому следующее приведёт к ошибке сегментации:

Outlook::_NameSpace *tmp = outlook->Session();
Outlook::NameSpace *session = new Outlook::NameSpace(tmp);
delete tmp; // or any other use of tmp: segfault

Если возвращаемый тип — тип coclass или интерфейса, объявленный в другой библиотеке типов, необходимо включить заголовочный файл пространства имён для этой другой библиотеки типов перед включением заголовочного файла для используемого пространства имён (оба заголовочных файла должны быть сгенерированы этим инструментом).

По умолчанию методы и свойства, возвращающие подобъекты, будут использовать тип, как в библиотеке типов. Ответственный за удаление или изменение родителя возвращённого объекта — вызывающая функция. Если установлен переключатель -compat, свойства и методы, возвращающие COM-объект, имеют возвращаемый тип IDispatch*, и пространство имён не будет объявлять классы-обёртки для интерфейсов.

В этом случае создайте соответствующий класс-обёртку явно:

Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());

Конечно, вы можете использовать возвращённый IDispatch*, в этом случае необходимо вызвать Release() по завершении работы с интерфейсом.

Все классы в пространстве имён помечены макросом, который позволяет экспортировать или импортировать их из DLL. Для этого объявите макрос, расширяющийся до __declspec(dllimport/export) перед включением заголовочного файла.

Для построения инструмента необходимо сначала построить библиотеку QAxContainer. Затем запустите вашу утилиту make в tools/dumpcpp.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/activeqt-dumpcpp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API