Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Qt] Probleme de chargement de dll

4 réponses
Avatar
mathieu
Bonjour,

Je d=E9sire recueillir des fonctions contenu dans un fichier dll pour la
r=E9alisation d'un programme en C++. J'utilise l'environnement IDE
code::block avec le compilateur du command prompt Qt.

Au d=E9part, afin de tester les fonctions dans ma dll, j'ai fait un
premier programme sous console uniquement =E0 partir de code::block et
son compilateur d'origine GNU GCC. Je faisais donc appel =E0 la
librairie par la fonction LoadLibrary() qui me retournait bien une
instance non null.

Une fois que j'ai valid=E9 les fonctions pr=E9sentes dans ma dll, j'ai
voulu passer sous le compilateur Qt pour avoir une fen=EAtre windows que
les techniciens (du laboratoire o=F9 je fais mon stage) puisse utiliser
mon programme avec facilit=E9. J'ai =E9t=E9 donc confront=E9 =E0 un probl=
=E8me de
conversion entre Unicode et Ansi.
De ce fait, de ma fonction d'origine LoadLibrary(const char *
filename) je suis pass=E9 =E0 la fonction LoadLibraryW(const WCHAR *
filename) pour que le compilateur ne me rejette pas, tout en
conservant l'unicode.
Petit d=E9tail : j'ai utilis=E9 le code suivant pour la conversion entre
le const char * et le const WCHAR * :
const WCHAR * dllName =3D L"Spider32.dll";

Et mon probl=E8me c'est qu'il ne me charge plus ma dll lorsque je suis
pass=E9 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=E9
qu'il peut malgr=E9 tout charger quelques dll, mais malheureusement je
ne peux pas charger celle que je veux! J'ai bien =E9videmment essayer en
Ansi et aussi avec la classe de Qt QLibrary, mais le r=E9sultat est
exactement le m=EAme...

J'imagine que =E7a doit venir de la configuration du compilateur mais
j'en suis pas s=FBr et puis je ne sais pas o=F9 modifier sa configuration
avec Qt et surtout quoi modifier!!!!

Auriez-vous une id=E9e pour sortir de ce probl=E8me ???

Merci d'avance !

4 réponses

Avatar
jerome
"mathieu" a écrit dans le message de news:

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)
Avatar
mathieu
> 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()...
Avatar
mathieu
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 ???
Avatar
mathieu
Bon finalement c'était bien ça!!! je viens de rajouter cette librairie
et ça fonctionne!!!!!!

Problème résolu!