[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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jerome
Le #19880241
"mathieu"
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!



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)
mathieu
Le #19880261
> Il ne faut jamais appeler les fonctions Unicode ..W ou Ansi ..A directeme nt.
Normalement, on met au début
#define UNICODE
#define _UNICODE
si on veut être en Unicode.



Je viens d'essayer mais ça ne change rien...

Tu devrais utiliser Visual Studio comme IDE pour compiler, les problème s
Unicode-Ansi sont + facilement gérables



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...

Si LoadLibrary() retourne NULL, tu devrais utiliser GetLastError() pour
savoir le numéro d'erreur (2 si non trouvé par exemple)



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()...
mathieu
Le #19880721
Je viens de me rendre compte finalement qu'en repassant sous le
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 ???
mathieu
Le #19880831
Bon finalement c'était bien ça!!! je viens de rajouter cette librairie
et ça fonctionne!!!!!!

Problème résolu!
Publicité
Poster une réponse
Anonyme