Seite 1 von 1

dll mit Qt-Funktionalität

Verfasst: 12. September 2008 07:41
von wipiku
Hallo zusammen,

wie im Titel schon beschrieben, versuche ich eine dll zu erstellen. Auf diese möchte ich dann in einem anderen Projekt mittels QLibrary zugreifen.

Das funktioniert auch schon ganz gut, solange ich in der dll kein Qt vertwende.

Sobald ich aber auch nur eine QMessageBox ausgeben lassen will, sagt mir qDebug zwar, dass er die dll laden konnte und auch die entsprechende Funktion gefunden hat, nur beim Ausführen stürzt mir das Programm dann ohne etwas zu sagen einfach ab.

Ersetze ich die QMessageBox durch MessageBoxA funktioniert es wieder.

Es müsste also irgendwie mit Qt zu tun haben.

Hier im Forum und auch sonst habe ich speziell zu diesem Problem leider nichts gefunden.

Kann mir jemand auf die Sprünge helfen?

Verfasst: 12. September 2008 07:46
von Christian81
Vieles in Qt benötigt eine laufende Q(Core)Application-Instanz. Dies kann man zwar auch in einer Dll realisieren (einige haben das hier imho schonmal versucht), ist aber nicht wirklich sinnvoll.

[gelöst] dll mit Qt-Funktionalität

Verfasst: 12. September 2008 08:42
von wipiku
Danke für die schnelle Antwort.

Bedeutet also im Klartext, dass ich mich von der Idee, Qt in einer dll umzusetzen, verabschieden sollte.

Verfasst: 12. September 2008 09:19
von macman
Kommt auf den Anwendungszweck an. Ich habe schon ActiveX-Komponenten mit Qt erstellt, warum sollte eine DLL nicht gehen.

Verfasst: 12. September 2008 09:33
von wipiku
Warum sie nicht geht, weiß ich eben nicht.

Aber wie gesagt, schon bei einer simplen QMessageBox bricht alles zusammen.

Der eigentliche Ansatz ist, einen QDialog in die dll zu packen. Im Groben etwa so, wie der Windows Datei Öffnen/Speichern Dialog.

Für evtl. Lösungsansätze wäre ich natürlich dankbar.

Verfasst: 12. September 2008 09:51
von RHBaum
Wie Christian81 schon schrieb, brauchst du ein Application object.
Falls du keines aus der HauptApp bekommst, in der dllMain() kannst du so eines erzeugen und wieder zerstoeren (beim entladen), damit kannst dann eigentlich QT GUI funtionen in der dll verwenden.

Funktioniert bei uns eigentlich ganz gut, z.b. um an nicht QT programmen plugins anzubinden, die eine QT oberflaeche haben.

Ciao ...

Verfasst: 12. September 2008 13:44
von wipiku
Also, nach etlichen Versuchen habe ich es jetzt geschafft, in dem ich in jeder externen dll-Funktion ein Application object erzeuge. Über die dllMain habe ich es leider nicht hin bekommen.