dumpcpp ツール (ActiveQt)

dumpcpp ツールは、型ライブラリ用のC++ネームスペースを生成します。

タイプライブラリ用の C++ ネームスペースを生成するには、以下のコマンドライン引数を指定してdumpcpp を実行します。

オプション結果
入力input のドキュメントを生成します。input には、タイプライブラリファイル、タイプライブラリ ID、またはオブジェクトの CLSID もしくは ProgID を指定できます
-o ファイルクラス宣言をfile.h に、メタオブジェクト情報をfile.cpp に書き込みます。
-n 名前空間C++ ネームスペース `namespace` を生成します。
-nometaobjectメタオブジェクト情報を含む .cpp ファイルを生成しません。その場合、メタオブジェクトは実行時に生成されます。
-getfile libidタイプライブラリlibidのファイル名を標準出力に出力します
-compatdynamicCall 互換の API を持つ名前空間を生成する
-controlnamesetControl() において、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 サブクラスが1つずつ宣言されます。control 属性が付与されたコクラスは、QAxWidget サブクラスによってラップされます。

作成可能なコクラス(つまり、noncreatable としてマークされていないコクラス)をラップするクラスには、デフォルトのコンストラクタがあります。これは通常、Application 型の単一のクラスです。

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

その他のすべてのクラスは、コンストラクタに IDispatch インターフェースのポインタを渡すことによってのみ作成できます。ただし、これらのクラスを明示的に作成すべきではありません。代わりに、すでに作成済みのオブジェクトの適切な API を使用してください。

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

すべてのコクラス・ラッパーには、実装されている各インターフェースに対して、そのインターフェース・ラッパークラスを受け取るコンストラクタが1つずつ用意されています。

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.