[gelöst] QLibrary und resolve()

Alles rund um die Programmierung mit Qt
Antworten
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

[gelöst] QLibrary und resolve()

Beitrag von Willi2793 »

Hallo,

ich habe ein mir unerklärliches Phänomen bei dem ich falsches Handling definitiv nicht ausschliesse aber leider auch nicht weiter weiß.

Ich habe also eine DLL vorliegen welche ich per QLibrary einbinden möchte. Ich habe also folgendes Statement:

Code: Alles auswählen

QLibrary lib("library");
Wir Ihr ahnt heißt die DLL "library.dll". Ich habe dann auch die typedef'S für die Funktionen der DLL gemacht:

Code: Alles auswählen

typedef int  (*func1) (const char*);
typedef int  (*func2) (int);
typedef void (*func3) ();
und die resolves folgendermassen codiert:

Code: Alles auswählen

func1 twiFunc1 = (func1) lib.resolve("Function1");
func2 twiFunc2 = (func)2 lib.resolve("Function2");
func3 twiFunc3 = (func3) lib.resolve("Function3");
So weit, so gut. Das funktionietr auch alles und der Debugger zeigt ir danach auch an das die Funktionen alle korrekt geladen sind. Nun rufe ich sie auf. Einige funktionieren auch und bei anderen lande ich im Nirvana. Interessanterweise lande ich bei anderen Funktionen im Nirvana wenn ich vor den Resolves z.B. enen beliebigen qDebug() einbaue.

Ich vermute also das ich hier irgendwie etwas bei der Behandlung von QLibrary falsch mache oder vergessen habe. Aber ich sehe selebr kein Problem!?

Grüße,
Willi[/code]
Zuletzt geändert von Willi2793 am 29. März 2011 17:25, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das ist eher ein C-Problem als Qt.
Wurde die Funktionen auch korrekt mit extern 'C' exportiert? Was sagt pexports wie die Funktionen heißen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

Ja, die Funktionen wurden bei der Erstellung der DLL exported. Und pexports gibt mir unter EXPORTED auch genau die Namen aus die ich erwartet habe
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Entlädst Du die Library wieder (== QLibrary Objekt wird zerstört) bzw. wurde es auch korrekt mit stdcall exportiert (hoffe stdcall ist das default unter windows)?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

Nein, die Library wird nicht zu früh entladen. Aber ich habe inzwischen was gefunden. Ich muss statt:

Code: Alles auswählen

typedef int  (*func1) (const char*);
dieses hier angeben:

Code: Alles auswählen

typedef int  (__stdcall *func1) (const char*);
Gefunden habe ich es hier:

http://www.qtcentre.org/threads/15722-U ... -arguments
Antworten