Zugriff auf TurboCAD via COM

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
hotzenplotz
Beiträge: 3
Registriert: 17. Dezember 2009 10:01

Zugriff auf TurboCAD via COM

Beitrag von hotzenplotz »

Hallo,

ich möchte auf eine COM Dll zugreifen. Meine bisherigen Versuche schlugen fehl. Vielleicht kann mir einer von euch helfen. Es geht mir auch um die generelle Vorgehensweise so etwas mi QT zu machen. Meine C++ Kenntnisse sind ein bisschen eingerostet;)

Bisher habe ich diese Schritte (mit wenig Erfolg) ausgeführt:

Neues QT4 Projekt.
*.pro Datei habe ich wie folgt geschrieben:

Code: Alles auswählen

TARGET = TcAppGui
TEMPLATE = app
CONFIG += qaxcontainer
TYPELIBS = $$system(dumpcpp -o input -getfile {6A481400-E531-11CF-A115-00A024158DAF})

SOURCES += main.cpp\
        tcapplication.cpp

HEADERS  += tcapplication.h

FORMS    += tcapplication.ui
Das generiert die Wrapper Klassen in den Dateien Imsigx15.h + Imsigx15.cpp

Gut soweit. Sollte auch so funktionieren?!

Die Header Imsigx15.h inkludiere ich ganz normal. Ab jetzt bekomme ich beim kompilieren 9 Fehler angezeigt. Ich muss dazu sagen, ich habe bis jetzt noch keinen Code implemeniert.

Fehler:

Code: Alles auswählen

C:/Users/hotzenplotz/Documents/TcApp_UI/Imsigx15.h:32783: error: 'qax_result' declared as reference but not initialized
Die anderen 8 Fehler sind identisch, bis auf die Zeilennummern.

Ein Klick auf den Fehler bringt mich zu diesem Code:

Code: Alles auswählen

inline QVariant& IApplication::SetStatusDialogText()
{
    QVariant& qax_result;
    void *_a[] = {(void*)&qax_result};
    qt_metacall(QMetaObject::InvokeMetaMethod, 126, _a);
    return qax_result;
}
Kann mir jemand einen Tip geben was ich Falsch mache?

Vielen Dank im Voraus.

Grüße
...
hotzenplotz
Beiträge: 3
Registriert: 17. Dezember 2009 10:01

Beitrag von hotzenplotz »

Hat keiner eine Idee was falsch sein könnte?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das hat nix mit Qt zu tun sondern mit C++ und dem prinzipiellen Verständnis dafür.
Wenn du eine Referenz deklarieren willst, musst du sofort (!) mit dem Objekt, welches referenziert werden soll, initialisieren. Eine spätere Zuweisung funktioniert mit Referenzen nicht, das gibt erst recht nen Error.

Du willst, so wie sich dein Code anfühlt, mit Zeigern arbeiten.
Und qt_metacall brauchst du eigentlich gar nicht, da nimmst du bitte direkt QMetaObject::invokeMethod. Alles, was nicht in der Doku zu finden ist (und wo sich dadurch dir eine ausführliche Dokumentation entzieht), lässt du besser bleiben ;).
Was du da außerdem mit deinem Rumgecaste versuchst, entzieht sich meiner Vorstellungskraft ;)

Erklär mal einfach, was diese zitierte Codepassage bewirken soll, dann kann man dir eher helfen.
hotzenplotz
Beiträge: 3
Registriert: 17. Dezember 2009 10:01

Beitrag von hotzenplotz »

Sorry, ich bin sehr spät dran. Ich hatte viel zu tun und will jetzt weiter dran arbeiten! Ich habe nichts selbst gemacht! Ich habe lediglich einen Wrapper automatisch von QT Designer generieren lassen über die COM DLL. Dies ist aus obigen Post ersichtlich! Wer lesen kann ist klar im Vorteil ;) Ich habe den Wrapper ganz normal inkludiert und bekam diesen Fehler.

Das hat nichts zu tun mit meinem C++ Verständnis....
Antworten