Spec-Zone.ru › Qt 5.12

Инструмент 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 Генерировать пространство имен с совместимым с dynamicCall API
-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.12/activeqt-dumpcpp.html

Spec-Zone.ru

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