[Qt] Probleme de chargement de dll
Le
mathieu
Bonjour,
Je désire recueillir des fonctions contenu dans un fichier dll pour la
réalisation d'un programme en C++. J'utilise l'environnement IDE
code::block avec le compilateur du command prompt Qt.
Au départ, afin de tester les fonctions dans ma dll, j'ai fait un
premier programme sous console uniquement à partir de code::block et
son compilateur d'origine GNU GCC. Je faisais donc appel à la
librairie par la fonction LoadLibrary() qui me retournait bien une
instance non null.
Une fois que j'ai validé les fonctions présentes dans ma dll, j'ai
voulu passer sous le compilateur Qt pour avoir une fenêtre windows que
les techniciens (du laboratoire où je fais mon stage) puisse utiliser
mon programme avec facilité. J'ai été donc confronté à un probl=
ème de
conversion entre Unicode et Ansi.
De ce fait, de ma fonction d'origine LoadLibrary(const char *
filename) je suis passé à la fonction LoadLibraryW(const WCHAR *
filename) pour que le compilateur ne me rejette pas, tout en
conservant l'unicode.
Petit détail : j'ai utilisé le code suivant pour la conversion entre
le const char * et le const WCHAR * :
const WCHAR * dllName = L"Spider32.dll";
Et mon problème c'est qu'il ne me charge plus ma dll lorsque je suis
passé sous le compilateur de Qt, tout en sachant qu'auparavant il me
la chargait bien avec le compilateur GNU GCC De plus j'ai remarqué
qu'il peut malgré tout charger quelques dll, mais malheureusement je
ne peux pas charger celle que je veux! J'ai bien évidemment essayer en
Ansi et aussi avec la classe de Qt QLibrary, mais le résultat est
exactement le même
J'imagine que ça doit venir de la configuration du compilateur mais
j'en suis pas sûr et puis je ne sais pas où modifier sa configuration
avec Qt et surtout quoi modifier!!!!
Auriez-vous une idée pour sortir de ce problème ???
Merci d'avance !
Je désire recueillir des fonctions contenu dans un fichier dll pour la
réalisation d'un programme en C++. J'utilise l'environnement IDE
code::block avec le compilateur du command prompt Qt.
Au départ, afin de tester les fonctions dans ma dll, j'ai fait un
premier programme sous console uniquement à partir de code::block et
son compilateur d'origine GNU GCC. Je faisais donc appel à la
librairie par la fonction LoadLibrary() qui me retournait bien une
instance non null.
Une fois que j'ai validé les fonctions présentes dans ma dll, j'ai
voulu passer sous le compilateur Qt pour avoir une fenêtre windows que
les techniciens (du laboratoire où je fais mon stage) puisse utiliser
mon programme avec facilité. J'ai été donc confronté à un probl=
ème de
conversion entre Unicode et Ansi.
De ce fait, de ma fonction d'origine LoadLibrary(const char *
filename) je suis passé à la fonction LoadLibraryW(const WCHAR *
filename) pour que le compilateur ne me rejette pas, tout en
conservant l'unicode.
Petit détail : j'ai utilisé le code suivant pour la conversion entre
le const char * et le const WCHAR * :
const WCHAR * dllName = L"Spider32.dll";
Et mon problème c'est qu'il ne me charge plus ma dll lorsque je suis
passé sous le compilateur de Qt, tout en sachant qu'auparavant il me
la chargait bien avec le compilateur GNU GCC De plus j'ai remarqué
qu'il peut malgré tout charger quelques dll, mais malheureusement je
ne peux pas charger celle que je veux! J'ai bien évidemment essayer en
Ansi et aussi avec la classe de Qt QLibrary, mais le résultat est
exactement le même
J'imagine que ça doit venir de la configuration du compilateur mais
j'en suis pas sûr et puis je ne sais pas où modifier sa configuration
avec Qt et surtout quoi modifier!!!!
Auriez-vous une idée pour sortir de ce problème ???
Merci d'avance !

Poser une question


> const WCHAR * dllName = L"Spider32.dll";
Il ne faut jamais appeler les fonctions Unicode ..W ou Ansi ..A directement.
Normalement, on met au début
#define UNICODE
#define _UNICODE
si on veut être en Unicode.
Tu devrais utiliser Visual Studio comme IDE pour compiler, les problèmes
Unicode-Ansi sont + facilement gérables
Si LoadLibrary() retourne NULL, tu devrais utiliser GetLastError() pour
savoir le numéro d'erreur (2 si non trouvé par exemple)
Je viens d'essayer mais ça ne change rien...
Le gros problème c'est que j'ai déjà commencé un logiciel assez lou rd
sous Qt et qui fonctionne je voudrais juste rajouter une autre partie
pour le compléter...Donc je préfèrerais ne pas changer de
compilateur!! En plus, je ne connais que la librairie Qt, je suis à
l'origine un étudiant en électronique et non en informatique...
Le GetLastError() me renvoi 126 soit "The specified module could not
be found" alors que ma dll est bien présente à coté de mon exécutab le
et que je donne directement le nom de ma dll dans le chemin de
LoadLibrary()...
compilateur de code::block GNU GCC qu'à l'exécution de mon tout
premier programme j'ai une erreur windows qui apparait : il me dit que
le fichier INTERLNK.dll est introuvable. C'est quoi ce fichier et est-
ce qu'il peut être à l'origine de mon problème finalement ???
et ça fonctionne!!!!!!
Problème résolu!