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 :
| Option | Résultat |
|---|---|
| input | Génère la documentation pour l'entrée. L'entrée peut spécifier un fichier de bibliothèque de types ou un ID de bibliothèque de types, ou un CLSID ou un ProgID pour un objet. |
| -o file | Écrit la déclaration de la classe dans le fichier file.h et les méta-informations sur l'objet dans le fichier file.cpp |
| -n namespace | Génère un espace de noms C++ |
| -nometaobject | Ne génère pas de fichier .cpp avec les informations sur les méta-objets. L'objet méta est alors généré lors de l'exécution. |
| -getfile libid | Affiche le nom de fichier de la bibliothèque typographique libid sur la sortie standard. |
| -compat | Génère un espace de noms avec une API compatible avec dynamicCall |
| -controlname | Utiliser le nom de la classe de contrôle au lieu de l'UUID dans setControl() |
| -v | Affiche les informations relatives à la version |
| -h | Affiche l'aide |
L'exécution manuelle de l'outil (et peut-être même la vérification des fichiers générés dans votre système de contrôle de version) est généralement suffisante, car les bibliothèques de types changent très rarement. Si votre bibliothèque de types change fréquemment, vous pouvez intégrer dumpcpp dans le système de construction qmake. Dans votre fichier .pro, listez 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 classes marquées par l'attribut control seront enveloppées par une sous-classe QAxWidget.
Les classes qui enveloppent les coclasses créables (c'est-à-dire les coclasses qui ne sont pas marquées comme noncreatable) ont un constructeur par défaut ; il s'agit généralement d'une seule classe 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 cependant pas être créées explicitement. Ces classes ne doivent cependant pas être créées explicitement. Il convient plutôt d'utiliser l'API appropriée des objets déjà créés.
Outlook::_NameSpace *session = outlook->Session();
Tous les wrappers de coclasses ont également un constructeur qui prend 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 interface, de sorte que ce qui suit 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 un type de coclasse ou d'interface déclaré dans une autre bibliothèque de types, vous devez inclure l'en-tête de l'espace de noms de cette autre bibliothèque de types 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 de la bibliothèque de types. L'appelant de la fonction est responsable de la suppression ou de la répartition de l'objet retourné. Si le commutateur -compat est activé, les propriétés et les méthodes renvoyant un objet COM ont le type de retour IDispatch*, et l'espace de noms ne déclarera pas de classes enveloppantes pour les interfaces.
Dans ce cas, il convient de créer explicitement la classe enveloppante appropriée :
Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());
Vous pouvez bien sûr utiliser directement l'IDispatch* renvoyé, auquel cas vous devez appeler Release() lorsque vous avez terminé avec 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 à partir d'une DLL. Pour ce faire, déclarez la macro à étendre à __declspec(dllimport/export) avant d'inclure le fichier d'en-tête.
Pour construire l'outil, vous devez d'abord construire la bibliothèque QAxContainer. Ensuite, exécutez votre outil make 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.