La herramienta dumpcpp (ActiveQt)
La herramienta dumpcpp genera un espacio de nombres C++ para una biblioteca de tipos.
Para generar un espacio de nombres C++ para una biblioteca de tipos, llame a dumpcpp con los siguientes parámetros de línea de comandos:
| Opción | Resultado |
|---|---|
| entrada | Generar documentación para input. input puede especificar un archivo de biblioteca de tipos o un ID de biblioteca de tipos, o un CLSID o ProgID para un objeto |
| -o archivo | Escribe la declaración de la clase en file.h y la información del metaobjeto en file.cpp |
| -n namespace | Genera un espacio de nombres C |
| -nometaobjeto | No genera un archivo .cpp con la información del meta objeto. El objeto meta se genera en tiempo de ejecución. |
| -getfile libid | Imprime el nombre de fichero de la biblioteca tipográfica libid en stdout |
| -compat | Generar espacio de nombres con API compatible con dynamicCall |
| -controlname | Utiliza el nombre de la clase de control en lugar del UUID en setControl() |
| -v | Imprimir información sobre la versión |
| -h | Imprime la ayuda |
Ejecutar la herramienta manualmente (y quizás incluso comprobar los archivos generados en su sistema de control de versiones) suele ser suficiente, ya que las bibliotecas de tipos cambian muy raramente. Si su biblioteca de tipos cambia con frecuencia, puede integrar dumpcpp en el sistema de compilación qmake. En su archivo .pro, enumere las bibliotecas de tipos que desea utilizar en la variable TYPELIBS:
TEMPLATE = app
TARGET = qutlook
QT += widgets axcontainer
TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})El espacio de nombres generado declarará todas las enumeraciones, así como una subclase QAxObject por cada coclass y interface declaradas en la biblioteca de tipos. Las coclases marcadas con el atributo control serán envueltas por una subclase QAxWidget.
Aquellas clases que envuelven coclases creables (es decir, coclases que no están marcadas como noncreatable) tienen un constructor por defecto; éste suele ser una única clase de tipo Application.
Outlook::Application *outlook = new Outlook::Application;
Todas las demás clases sólo pueden crearse pasando un puntero de interfaz IDispatch al constructor; sin embargo, esas clases no deben crearse explícitamente. En su lugar, utilice la API apropiada de objetos ya creados.
Outlook::_NameSpace *session = outlook->Session();
Todas las envolturas de coclase también tienen un constructor que toma una clase envoltura de interfaz para cada interfaz implementada.
Outlook::NameSpace *session = outlook->Session();
Tienes que crear coclasses para poder conectarte a las señales del subobjeto. Tenga en cuenta que el constructor borra el objeto interfaz, por lo que lo siguiente causará un fallo de segmentación:
Outlook::_NameSpace *tmp = outlook->Session(); Outlook::NameSpace *session = new Outlook::NameSpace(tmp); delete tmp; // or any other use of tmp: segfault
Si el tipo de retorno es de una coclase o de un tipo de interfaz declarado en otra biblioteca de tipos, debe incluir la cabecera del espacio de nombres de esa otra biblioteca de tipos antes de incluir la cabecera del espacio de nombres que desea utilizar (ambas cabeceras deben generarse con esta herramienta).
Por defecto, los métodos y propiedades que devuelven subobjetos utilizarán el tipo de la biblioteca de tipos. El invocador de la función es responsable de borrar o reparentar el objeto devuelto. Si el modificador -compat está activado, las propiedades y métodos que devuelvan un objeto COM tendrán el tipo de retorno IDispatch*, y el espacio de nombres no declarará clases envoltorio para interfaces.
En este caso, cree explícitamente la clase envoltorio correcta:
Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());
Por supuesto, puede utilizar directamente el IDispatch* devuelto, en cuyo caso deberá llamar a Release() cuando haya terminado con la interfaz.
Todas las clases del espacio de nombres están etiquetadas con una macro que permite exportarlas o importarlas desde una DLL. Para ello, declare la macro para que se expanda a __declspec(dllimport/export) antes de incluir el archivo de cabecera.
Para construir la herramienta primero debes construir la librería QAxContainer. Luego ejecute su herramienta make en 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.