dumpcpp 도구 (ActiveQt)
dumpcpp 도구는 타입 라이브러리에 대한 C++ 네임스페이스를 생성합니다.
타입 라이브러리에 대한 C++ 네임스페이스를 생성하려면 다음 명령줄 매개변수와 함께 dumpcpp 를 호출하십시오:
| 옵션 | 결과 |
|---|---|
| 입력 | 입력 대상에 대한 문서를 생성합니다. 입력으로는 타입 라이브러리 파일, 타입 라이브러리 ID, 또는 객체의 CLSID나 ProgID를 지정할 수 있습니다 |
| -o 파일 | 클래스 선언을 file.h에, 메타 객체 정보를 file.cpp에 기록합니다. |
| -n 네임스페이스 | C++ 네임스페이스 namespace를 생성합니다. |
| -nometaobject | 메타 객체 정보가 포함된 .cpp 파일을 생성하지 않습니다. 이 경우 메타 객체는 런타임에 생성됩니다. |
| -getfile libid | 타입 라이브러리 libid 의 파일 이름을 stdout에 출력합니다 |
| -compat | dynamicCall과 호환되는 API를 사용하는 네임스페이스를 생성합니다. |
| -controlname | setControl()에서 UUID 대신 컨트롤 클래스 이름을 사용합니다 |
| -v | 버전 정보를 출력합니다 |
| -h | 도움말 출력 |
타입 라이브러리는 변경되는 경우가 매우 드물기 때문에, 일반적으로 도구를 수동으로 실행하는 것만으로도 충분하며(생성된 파일을 버전 관리 시스템에 체크인하는 것도 고려해 볼 수 있습니다). 타입 라이브러리가 빈번하게 변경되는 경우, dumpcpp 를 qmake 빌드 시스템에 통합할 수 있습니다. .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 도구를 실행하십시오.
© 2026 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.