QLibrary resolve problem

Alles rund um die Programmierung mit Qt
Antworten
Nippler
Beiträge: 5
Registriert: 30. April 2008 09:36

QLibrary resolve problem

Beitrag von Nippler »

I soll eine bestehende dll (nicht mit QT geschrieben) in QT einbinden und die Funktionen davon benutzen (in Windows).
Wenn ich die dll mit QLibrary einbinde und lade funktioniert das soweit. Wenn ich aber nachher die Funktionen resolve so kriege ich zwar eine Funktion aus der dll zurück aber nicht diejenige die ich anfordere (das sehe ich wenn ich debuge).

typedef int (__stdcall *Store_Job_B)(QString, QString);
Store_Job_B rxServerFunc6 = (Store_Job_B)myLib.resolve("Store_Job_B");

Nun kriege ich z.B. die Funktion "Delete_Job" zurück! Wenn ich die dll in ein Visual C++ projekt einbinde funktioniert alles perfekt.

An was kann das liegen?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

klingt höchst eigenartig... dazu mehrere Fragen:

1. "das sehe ich wenn ich debuge": du springst mit dem Debugger in die vermeindliche Methode, und landest in der falschen?

2. "eine bestehende dll (nicht mit QT geschrieben)": Eine nicht in Qt geschriebene Library kann aber keine QStrings als Parameter haben! ("typedef int (__stdcall *Store_Job_B)(QString, QString);")

3. was geschieht, wenn du die Lib ganz normal linkst? Einfach die Funktion deklarieren und die dll dazulinken.. dann müsstest du schon zur Linkzeit sehen, ob das Symbol korrekt gefunden wird (oder eine entpsrechende Fehlermeldung kriegen).
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Denk auch,irgendwas stimmt mit der funktion selber schon nicht ....

Sicher das der prototyp der funktion so stimmt ?
(
Eine nicht in Qt geschriebene Library kann aber keine QStrings als Parameter haben!
)

Wenn die funktion z.b. nur normale C-Strings typen erwartet (was sprachneutrale dlls meist tun) dann ueberschreibst du den aufruf stack ... und klar das der debugger dannn durcheinander kommt.
I soll eine bestehende dll (nicht mit QT geschrieben) in QT einbinden und die Funktionen davon benutzen (in Windows).
wie bekommst du denn die funktionsprototypen ? doch hoffentlich ned nur aus ner doc, sondern aus nem c-header .... hoffentlich ^^
Wenn ich die dll in ein Visual C++ projekt einbinde funktioniert alles perfekt.
Ich vermute die dll ist auch in VC++ geschrieben ....
mit was fuer aufrufkonventionen sind die öffentlichen funktionen definiert (stehen direkt davor, oder per compiler-schalter global gesetzt) Exportiert die dll klassen ???

Ciao ....
Nippler
Beiträge: 5
Registriert: 30. April 2008 09:36

Solved

Beitrag von Nippler »

Danke euch. Habe nun das Problem lösen können, der Debugger zeigt zwar immer noch Mist an, jedoch funktionieren die Funktionen nun. Das Problem war dass ich QString nach char* umwandeln musste, um die Funktionen verwenden zu können.
Antworten