dumpcpp 도구(ActiveQt)
dumpcpp
도구는 타입 라이브러리에 대한 C++ 네임스페이스를 생성합니다.
유형 라이브러리에 대한 C++ 네임스페이스를 생성하려면 다음 명령줄 매개변수와 함께 dumpcpp
을 호출합니다:
Option | Result |
---|---|
input | 입력에 대한 문서를 생성합니다. 입력은 타입 라이브러리 파일 또는 타입 라이브러리 ID 또는 개체의 CLSID 또는 ProgID를 지정할 수 있습니다. |
-o 파일 | 클래스 선언을 file.h에, 메타 객체 정보를 file.cpp에 기록합니다. |
-n 네임스페이스 | C++ 네임스페이스 네임스페이스를 생성합니다. |
-nometaobject | 메타 객체 정보가 포함된 .cpp 파일을 생성하지 않습니다. 그러면 메타 객체가 런타임에 생성됩니다. |
-getfile libid | 타입 라이브러리 libid의 파일 이름을 stdout에 출력합니다. |
-compat | dynamicCall 호환 API로 네임스페이스를 생성합니다. |
-controlname | setControl()에서 UUID 대신 컨트롤 클래스 이름을 사용합니다. |
-v | 버전 정보 인쇄 |
-h | 도움말 인쇄 |
유형 라이브러리는 거의 변경되지 않으므로 일반적으로 도구를 수동으로 실행하고 생성된 파일을 버전 관리 시스템에서 확인하는 것으로 충분합니다. 유형 라이브러리가 자주 변경되는 경우에는 qmake
빌드 시스템에 dumpcpp
을 통합할 수 있습니다. .pro 파일에서 TYPELIBS 변수에 사용하려는 유형 라이브러리를 나열합니다:
TEMPLATE = app TARGET = qutlook QT += widgets axcontainer TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})
생성된 네임스페이스는 모든 열거형과 유형 라이브러리에 선언된 coclass
및 interface
각각에 대해 하나의 QAxObject 서브클래스를 선언합니다. 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 라이브러리를 빌드해야 합니다. 그런 다음 tools/dumpcpp
에서 make 도구를 실행합니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.