Seite 1 von 1

QT-DLL fuer Visual-C++ kompatibel machen

Verfasst: 16. Dezember 2010 11:51
von martin_sch
Hallo, liebe QT-Programmierer!


Ich programmiere zur Zeit eine Bibliothek in QT und möchte daraus später eine DLL erstellen.
Erste Versuche mit DLLs gestalteten sich als Erfolgreich. Es war auch relativ einfach die erstellte DLL und die Library in ein neues QT-Projekt einzufügen.

Das Problem aber: Die DLL sollte möglichst kompatibel sein, also man sollte sie auch unter Visual-C++ 2010-Express (Windows XP) einbinden können.

Leider ist das nicht so einfach, weil anscheinend der GNU-Compiler und Visual-C++ verschiedene Formate für die Einsprungadressen verwenden.
Bis jetzt habe ich es nicht geschaft, eine DLL, die durch QT erstellt wurde, in Visual-C++ einzubinden.
Genaugenommen bzw. soweit ich dies verstanden habe, liegt das Problem nicht an der DLL, sondern an der Library.

Das ganze Projekt unter Visual-C++, zwecks DLL-Erstellung, nochmals anzulegen halte ich für übertrieben, zudem ich in C++ relativ neu bin.

Nun wollte ich fragen, ob es ein Tool gibt, mit dem man eine fertige QT-Library dermaßen bearbeiten kann, dass sie für Visual-C++ kompatibel wird?
Oder ob es in QT eine Option, für die Erstellung einer kompatiblen Library, gibt?

Ich bin für jede Antwort dankbar.


Schöne Grüße

Martin

Verfasst: 16. Dezember 2010 11:59
von Christian81
Da hilft nur Qt neu kompilieren.

Verfasst: 16. Dezember 2010 12:08
von RHBaum
Kurze Antwort:

Vergiss es !

lange Antwort:
Es ist kein QT Problem.
C++ Interfaces sind nicht binaer spezifiziert. Das heisst, die ausrichtung der Methoden, wo der Member steht, wer den stack freiraeumt, wo die vtable liegt, in welcher reihenfolge die virtuellen methoden in der vtable liegen ... das alles koennen die compilerhersteller machen wie sie wollen.

Das heisst, eine DLL/Lib, die mit gcc kompiliert wird, und Klassen in der Schnittstelle nach aussen exportiert, wird nie mit irgendwas zusammenarbeiten, was vom Visual studio kompiler kommt.

Was binaer inkompatibel ist, muss aber nicht sourceinkompatibel sein. Du kannst sw entwickeln die sich mit VS und gcc kompilieren laesst.

Du hasst auch nen noch viel groesseres Problem. Die Qt selber.
Stell dir vor deine Exe ist mit VS kompiliert, deine Dll mit dem gcc, und die schnittstelle wuerde funktionieren (weil c schnittstelle).
Beide verwenden qt dynamisch. QT exportiert klassen ....
Du kannst deiner exe schlecht sagen: nimm diese version der QT, und der Dll im selben prozessraum, nimm die andere Version der QT (Theorethisch möglich, praktisch ne ziemliche frikkelei und unhandlich).

Die eizige chance Die du hasst:
die dll mit c- schnittstellen, und die QT gleich statisch zur dll linken.
Mit qApp musst dann noch bissi aufpassen, weil nen eigenes brauchst, das globale von der exe wuerde dich sprengen ....

Probleme erkannt ?

Ciao ....