Инструмент dumpcpp (ActiveQt)
|
Опция | Результат |
---|---|
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 библиотеки типов, которые вы хотите использовать:
TEMPLATE = app TARGET = qutlook CONFIG += qaxcontainer TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})
В сгенерированном пространстве имен будут объявлены все перечисления, а также один подкласс 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; // или любое другое использование tmp: segfault
Если возвращаемый тип является коклассом или интерфейсным типом, объявленным в другой библиотеке типов, вы включаете заголовок пространства имен для этой другой библиотеки типов до включения заголовочного файла для тех пространств имен, которые вы хотите использовать (оба заголовочных файла будут сгенерированы этим инструментом).
По-умолчанию, возвращаемые методами и свойством субобъекты будет использовать тип как в библиотеке типов. Вызывающий функцию является ответственным за удаление или перепривязку родителя возвращаемого объекта. Если ключ -compat включен, свойства и метод возвращают COM-объект, имеющий тип IDispatch*, а пространство имен не будет объявлять классы-обёртки для интерфейсов.
В этом случае явно создается правильный класс-обёртка:
Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());
Разумеется, вы можете использовать непосредственно возвращаемый IDispatch*, в этом случае вызывайте Release() когда завершите работу с интерфейсом.
Все классы в пространстве имен помечены с помощью макросов, которые позволяют вам экспортировать или импортировать их из DLL. Чтобы сделать это объявите макрос для расширения для __declspec(dllimport/export) прежде чем включить заголовочный файл.
Чтобы собрать инструмент вы должны сначала собрать библиотеку QAxContainer. Затем запустите ваш make-инструмент в каталоге tools/dumpcpp.
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Торговые марки | Qt 4.5.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |