chargement dynamique de dll échoue - C++ - Programmation
Marsh Posté le 02-06-2002 à 12:22:56
Non, loadlibrary est nickel, c'est juste getprocaddress qui merde
Marsh Posté le 02-06-2002 à 12:27:24
comment exportes-tu tes méthodes ? fichier .def ?
au passage, ce topic me rappelle que tu n'es pas le premier à poser la question ... as-tu fait une recherche ?
Marsh Posté le 02-06-2002 à 12:43:42
verifie le typage et nom de la fonction pour getProcAdresse
vérifie aussi que tu as bien mis dans to projet de la dll devant les fonctions exporté:
extern "C" __declspec(dllexport)
Marsh Posté le 02-06-2002 à 13:02:04
alors non je n'utilise pas de .def, juste des __declspec(dllexport) devant les fonctions.
Oui j'ai fais une recherche sur tous les sujets contenant dll depuis le début, et j'ai tout lu sans résultat.
hercule > j'ai essayé de rajouter extern "C", sans résultat
Voila ma déclaration :
extern "C" __declspec (dllexport) void WINAPI Coucou (void);
ensuite je fais ça :
typedef void (WINAPI * Fonction)(void);
Fonction Hello;
HINSTANCE hDLL = LoadLibrary ("MaDll" );
Hello = (Fonction) GetProcAddress (hDLL, "Coucou" );
et là hello = 0, et getlasterror renvoie 126 ... erreur très mal documentée.
[jfdsdjhfuetppo]--Message édité par freewol le 02-06-2002 à 13:03:31--[/jfdsdjhfuetppo]
Marsh Posté le 02-06-2002 à 13:08:56
essaye de passer par un .def, j'avais eu des problèmes avec le dllexport. le .def réglait la chose.
mais tu devrais pouvoir régler le problème en lisant la doc à fond. une page de la msdn qui explique l'export en détail : http://msdn.microsoft.com/library/ [...] _a_DLL.asp
Marsh Posté le 02-06-2002 à 13:31:04
pour le lien vers la msdn, je l'avais déjà lu, ça n'a rien réglé
ensuite pour le .def, je veux bien, mais je n'ai absolument pas compris comment ça marche, alors j'ai bien essayé de créer un fichier .ref et de l'ajouter au projet, avec les lignes
LIBRARY MaDLL
EXPORTS
Coucou @1
mais bon je vois pas trop ce que ça pourrait changer si je règle pas une qcq option, mais la msdn est absolument incrompréhensible à ce sujet, donc un peu d'aide serait la bienvenue ...
Marsh Posté le 02-06-2002 à 14:33:43
un peu de lumière sur l'export :
http://groups.google.com/groups?q= [...] net&rnum=2 (et le thread associé)
en utilisant dependency walker (inclus avec vc++, sinon -> google) tu devrais retrouver le nom décoré.
pour le .def, ça se rajoute dans les options de linking (alt+f7, regarde le contrôle tout en bas avec la ligne de commande). rajoute
/def:"monfichierdedef.def"
Marsh Posté le 02-06-2002 à 15:00:42
ohlala ... merci merci merci !
grâce à ces 3 super conseils, je viens de tout (euh ... enfin presque tout ) comprendre aux dll !!
Encore merci.
Marsh Posté le 02-06-2002 à 15:20:19
oui perfectly, c'est tout nickel
en fait le truc c'est que vc++ exportait ma fonction coucou sous un nom du genre ?coucouc@@XYYXYZ alors bon, c'est sur que ça marchait moins bien ...
Marsh Posté le 02-06-2002 à 12:08:58
Voila je comprends plus rien là :
j'ai créé une dll toute simple, juste pour un test. Si j'essaie de la linker en utilisant le header et la lib, ça marche nickel je peux utiliser les fonctions qui sont dessus.
Mais si j'essaie la méthode dynamique décrite dans la msdn, ie LoadLibrary suivi de GetProcAddress, ça échoue à chaque fois, et ce avec la même dll !!
Alors moi je n'avais jusqu'à présent utilisé que la 1ere méthode, donc je ne connais rien à la seconde, si vous pouviez m'expliquer ce que j'ai mal fait, vous me rendriez un immense service !!