L'outil dumpcpp (ActiveQt)

L'outil dumpcpp génère un espace de noms C++ pour une bibliothèque de types.

Pour générer un espace de noms C++ pour une bibliothèque de types, appelez dumpcpp avec les paramètres de ligne de commande suivants :

OptionRésultat
inputGénère la documentation pour l'entrée. L'entrée peut spécifier un fichier de bibliothèque de types, un identifiant de bibliothèque de types, un CLSID ou un ProgID pour un objet
-o fichierÉcrit la déclaration de classe dans le fichier file.h et les informations sur le méta-objet dans le fichier file.cpp
-n espace de nomsGénère un espace de noms C++ « namespace »
-nometaobjectNe génère pas de fichier .cpp contenant les informations de méta-objet. Le méta-objet est alors généré lors de l'exécution.
-getfile libidAffiche le nom du fichier de la bibliothèque de types libid sur la sortie standard
-compatGénérer un espace de noms avec une API compatible avec dynamicCall
-controlnameUtilise le nom de la classe de contrôle à la place de l’UUID dans la fonction setControl()
-vAfficher les informations de version
-hAfficher l'aide

Il suffit généralement d'exécuter l'outil manuellement (et éventuellement d'archiver les fichiers générés dans votre système de gestion de versions), car les bibliothèques de types changent très rarement. Si votre bibliothèque de types change fréquemment, vous pouvez intégrer dumpcpp au système de compilation d'qmake. Dans votre fichier .pro, répertoriez les bibliothèques de types que vous souhaitez utiliser dans la variable TYPELIBS :

TEMPLATE = app
TARGET   = qutlook
QT += widgets axcontainer

TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})

L’espace de noms généré déclarera toutes les énumérations, ainsi qu’une sous-classe ` QAxObject ` pour chaque ` coclass ` et ` interface ` déclarée dans la bibliothèque de types. Les coclasses marquées de l’attribut ` control ` seront encapsulées par une sous-classe ` QAxWidget `.

Les classes qui encapsulent des coclasses créables (c’est-à-dire des coclasses qui ne sont pas marquées comme « noncreatable ») disposent d’un constructeur par défaut ; il s’agit généralement d’une classe unique de type « Application ».

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

Toutes les autres classes ne peuvent être créées qu’en passant un pointeur d’interface `IDispatch` au constructeur ; ces classes ne doivent toutefois pas être créées explicitement. Utilisez plutôt l’API appropriée des objets déjà créés.

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

Tous les wrappers de coclasses disposent également d’un constructeur prenant une classe de wrapper d’interface pour chaque interface implémentée.

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

Vous devez créer des coclasses pour pouvoir vous connecter aux signaux du sous-objet. Notez que le constructeur supprime l’objet d’interface ; par conséquent, le code suivant provoquera une erreur de segmentation :

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

Si le type de retour est celui d’une coclasse ou d’une interface déclarée dans une autre bibliothèque de types, vous devez inclure l’en-tête d’espace de noms de cette autre bibliothèque avant d’inclure l’en-tête de l’espace de noms que vous souhaitez utiliser (les deux en-têtes doivent être générés à l’aide de cet outil).

Par défaut, les méthodes et les propriétés renvoyant des sous-objets utiliseront le type tel qu’il figure dans la bibliothèque de types. C’est à l’appelant de la fonction qu’il incombe de supprimer ou de réaffecter un parent à l’objet renvoyé. Si l’option « -compat » est activée, les propriétés et les méthodes renvoyant un objet COM ont pour type de retour « IDispatch* », et l’espace de noms ne déclarera pas de classes d’encapsulation pour les interfaces.

Dans ce cas, créez explicitement la classe d'encapsulation appropriée :

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

Vous pouvez bien sûr utiliser directement le pointeur IDispatch* renvoyé ; dans ce cas, vous devez appeler la fonction Release() lorsque vous avez fini d’utiliser l’interface.

Toutes les classes de l’espace de noms sont marquées d’une macro qui vous permet de les exporter ou de les importer depuis une DLL. Pour ce faire, déclarez la macro de manière à ce qu’elle se développe en __declspec(dllimport/export) avant d’inclure le fichier d’en-tête.

Pour compiler l’outil, vous devez d’abord compiler la bibliothèque QAxContainer. Exécutez ensuite votre outil de compilation dans tools/dumpcpp.

© 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.