Seite 1 von 1

Verwendung verschiedener QTCore.dlls notwendig

Verfasst: 20. Juli 2009 17:52
von Rumbert
Nochmals hallo miteinander :-)

Ich entwickel unter Windows Vista mit Visual Studio 2008 und QT 4.4.3.
Damit erstelle ich eine QT-Application, welche DLLs einer Drittanbieter API verwendet.
Da die dll des Drittanbieters ebenfalls QT verwendet, wird zu der API u.a. QTCore4.dll (Version 4.5.1) mitgeliefert.
Schau ich die Debugversion der Drittanbieter DLL im Dependencywalker an, so wird als Abhängieges Modul u.a. die QTCore4d.dll aufgelistet in der Version 4.5.1, welche sich im selben Verzeichnis wie die Drittanbieter DLL befindet.
Erzeuge ich nun meine Applikation linke ich ja gegen meine QTCore4d.dll, die im QTDIR\bin liegt also die in der Version 4.4.3. Und wenn ich mir dann das Executeable im Dependencywalker anschaue, sehe ich dass die 4.4.3 dll auch für die Drittanbieter DLL benutzt wird. Und genau hier liegt das Problem, dass in der Drittanbieter DLL Aufrufe von Methoden sind wie z.B QFlagLocation, die nicht aufgelößt werden können, weil sie in der verwendeten DLL Version noch nicht existieren.
Gibt es eine Möglichkeit über das Pro-File einzustellen, dass ich explizit angeben kann für welche Abhängigkeit welche DLL verwendet werden soll?

Grüße Rumbert

Verfasst: 20. Juli 2009 17:55
von Christian81
Das hat nichts mit dem pro-file zu tun sondern damit dass ein Prozess nicht zwei Versionen ein und derselben Library laden kann.

Verfasst: 20. Juli 2009 18:16
von RavenIV
Ich sehe hier zwei Möglichkeiten, möglicherweise funktionieren ja beide:
1) Du benutzt die selbe Qt-Version wie der Drittanbieter
2) Du linkst Dein Programm statisch mit Deiner Qt-Version

Verfasst: 20. Juli 2009 18:20
von Christian81
Statisch linken? Sollte nicht gehen da man dann z.B unter Umständen zwei QApplication-Objekte hat usw.

Verfasst: 20. Juli 2009 18:52
von solarix
davon ausgehend, dass die Library closed-source ist:

3) du bezahlst/überredest den Hersteller der Library, damit er dir eine Binary für dein Qt (und Compiler!!) liefert (falls qFlagLocation alles ist, kann der Source vermutlich auch unter 4.4 übersetzt werden).

Möglichweise kommt er dir ja auch entgegen, wenn du ihm eine komplette Entwicklungsumgebung in einer VirtualBox-VM sendest und es daher nur noch ein "qmake;make" braucht..

4) du bist zwingend auf genau diese Library und Qt 4.4 angewiesen: IPC (dein Programm + ein Qt4.5-Dienst, welcher die dll bedient)

manchmal gibt's halt keine einfachen lösungen...

Verfasst: 21. Juli 2009 10:30
von Rumbert
Super, da habe ich eine Menge Ansatzpunkte, um das Problem zu lösen, auf die ich so nie gekommen wäre!
Vielen Dank für die Antworten!

Grüße Rumbert

Verfasst: 21. Juli 2009 11:06
von phlox81
Ansonsten gäbe es noch die Möglichkeit beide Programme zu trennen, und dazwischen mit Interprocess oder Sockets die Kommunikation ablaufen zu lassen. Aber das ist sicher nur eine Option, wenn nichts anderes mehr geht ;)