Das dumpcpp-Werkzeug (ActiveQt)
Das Werkzeug dumpcpp
erzeugt einen C++-Namensraum für eine Typbibliothek.
Um einen C++-Namensraum für eine Typbibliothek zu erzeugen, rufen Sie dumpcpp
mit den folgenden Befehlszeilenparametern auf:
Option | Ergebnis |
---|---|
Eingabe | Dokumentation für input generieren. input kann eine Typbibliotheksdatei oder eine Typbibliotheks-ID oder eine CLSID oder ProgID für ein Objekt angeben |
-o Datei | Schreibt die Klassendeklaration in file.h und Meta-Objektinformationen in file.cpp |
-n Namespace | Erzeugt einen C++-Namensraum namespace |
-nometaobject | Erzeugt keine .cpp-Datei mit den Metaobjekt-Informationen. Das Metaobjekt wird dann zur Laufzeit erzeugt. |
-getfile libid | Gibt den Dateinamen für die Typelibrary libid auf stdout aus |
-compat | Namespace mit dynamicCall-kompatibler API generieren |
-controlname | Verwendet den Namen der Steuerklasse anstelle der UUID in setControl() |
-v | Versionsinformationen ausgeben |
-h | Hilfe ausgeben |
Das manuelle Ausführen des Tools (und vielleicht sogar das Einchecken der erzeugten Dateien in Ihr Versionskontrollsystem) ist normalerweise ausreichend, da sich Typbibliotheken nur sehr selten ändern. Wenn sich Ihre Typbibliothek häufig ändert, können Sie dumpcpp
in das qmake
Build-System integrieren. Führen Sie in Ihrer .pro-Datei die Typbibliotheken, die Sie verwenden möchten, in der Variablen TYPELIBS auf:
TEMPLATE = app TARGET = qutlook QT += widgets axcontainer TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})
Der generierte Namespace deklariert alle Aufzählungen sowie eine QAxObject Unterklasse für jede coclass
und interface
, die in der Typbibliothek deklariert sind. Mit dem Attribut control
gekennzeichnete Koklassen werden von einer QAxWidget Unterklasse umhüllt.
Die Klassen, die erzeugbare Koklassen umhüllen (d.h. Koklassen, die nicht als noncreatable
gekennzeichnet sind), haben einen Standardkonstruktor; dies ist typischerweise eine einzelne Klasse vom Typ Application
.
Outlook::Application *outlook = new Outlook::Application;
Alle anderen Klassen können nur durch Übergabe eines IDispatch-Schnittstellenzeigers an den Konstruktor erstellt werden; diese Klassen sollten jedoch nicht explizit erstellt werden. Verwenden Sie stattdessen die entsprechende API der bereits erstellten Objekte.
Outlook::_NameSpace *session = outlook->Session();
Alle Koklassen-Wrapper haben auch einen Konstruktor, der eine Interface-Wrapper-Klasse für jedes implementierte Interface nimmt.
Outlook::NameSpace *session = outlook->Session();
Sie müssen Koklassen erstellen, um eine Verbindung zu Signalen des Unterobjekts herstellen zu können. Beachten Sie, dass der Konstruktor das Schnittstellenobjekt löscht, so dass das Folgende einen Segmentierungsfehler verursachen wird:
Outlook::_NameSpace *tmp = outlook->Session(); Outlook::NameSpace *session = new Outlook::NameSpace(tmp); delete tmp; // or any other use of tmp: segfault
Wenn der Rückgabetyp einer Koklasse oder eines Schnittstellentyps ist, der in einer anderen Typbibliothek deklariert ist, müssen Sie den Namespace-Header für diese andere Typbibliothek einschließen, bevor Sie den Header für den Namespace einschließen, den Sie verwenden möchten (beide Header müssen mit diesem Tool generiert werden).
Standardmäßig verwenden Methoden und Eigenschaften, die Unterobjekte zurückgeben, den Typ, der in der Typbibliothek verwendet wird. Der Aufrufer der Funktion ist dafür verantwortlich, das zurückgegebene Objekt zu löschen oder zu reparieren. Wenn der Schalter -compat
gesetzt ist, haben Eigenschaften und Methoden, die ein COM-Objekt zurückgeben, den Rückgabetyp IDispatch*
, und der Namespace deklariert keine Wrapper-Klassen für Schnittstellen.
In diesem Fall müssen Sie die richtige Wrapper-Klasse explizit erstellen:
Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());
Sie können natürlich das zurückgegebene IDispatch* direkt verwenden, in diesem Fall müssen Sie Release()
aufrufen, wenn Sie mit der Schnittstelle fertig sind.
Alle Klassen im Namespace sind mit einem Makro versehen, mit dem Sie sie aus einer DLL exportieren oder importieren können. Dazu deklarieren Sie das Makro, um es zu __declspec(dllimport/export)
zu erweitern, bevor Sie die Header-Datei einfügen.
Um das Tool zu erstellen, müssen Sie zunächst die Bibliothek QAxContainer erstellen. Führen Sie dann Ihr make-Tool in tools/dumpcpp
aus.
© 2025 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.