Seite 1 von 1

QLibrary resolve problem

Verfasst: 4. Dezember 2008 16:44
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?

Verfasst: 5. Dezember 2008 09:01
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).

Verfasst: 5. Dezember 2008 09:54
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 ....

Solved

Verfasst: 10. Dezember 2008 15:22
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.