Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

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

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

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

ОпцияРезультат
inputГенерирует документацию для input. input может задавать либо файл библиотеки типов, либо идентификатор (ID) библиотеки типов, либо 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 библиотеки типов, которые вы хотите использовать:


В сгенерированном пространстве имен будут объявлены все перечисления, а также один подкласс QAxObject для каждого кокласса coclass и интерфейса interface объявленного в библиотеке типов. коклассы (coclasses) отмеченные атрибутом control будут обернуты подклассом QAxWidget.

Эти классы, обёртывающие коклассы, способные быть созданными (т.е. коклассы, не помеченные как noncreatable) имеют конструктор по-умолчанию; это типично для единственного класса типов Application.

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

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы собрать инструмент вы должны сначала собрать библиотеку QAxContainer. Затем запустите ваш make-инструмент в каталоге tools/dumpcpp.


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5