Prob avec GetProcAddress - C - Programmation
Marsh Posté le 29-09-2004 à 21:07:06
Voici le code :
Code :
|
Marsh Posté le 29-09-2004 à 21:08:21
tu peux me donner le contenu exact de la variable DLLName stp ?
Marsh Posté le 29-09-2004 à 21:11:21
bingo !
LoadLibrary prend en argument le nom de la dll, mais sans l'extension ".dll"
=> LoadLibrary("Hook" ) et pas LoadLibrary("Hook.dll" );
autre chose : prend l'habitude de tester les valeurs de retour des fonctions LoadLibrary et GetProcAddress, il y a plein de raisons qui pourraient les faire foirer, et si tu testes pas pourquoi, le débuggage en sera d'autant plus ardu
Marsh Posté le 29-09-2004 à 21:13:39
ca marche tj pas, et de toute facon loadlibrary retournait un pointeur non NULL...
Marsh Posté le 29-09-2004 à 21:16:45
appelle un GetLastError() juste après GetProcAddress pour obtenir le code d'erreur exact
Marsh Posté le 29-09-2004 à 21:26:00
http://msdn.microsoft.com/library/ [...] 0-499_.asp
127 = ERROR_PROC_NOT_FOUND, procédure non trouvée
comme je ne doute pas un seul instant que ta dll possède bien une fonction SetkbdHook(), j'en arrive à la conclusion que tu dois être emmerdé à cause de la décoration des fonctions du C++
en gros, ta fonction exportée a été décorée par le linker.
pour remédier à ceci, tu dois donc compiler ta dll et la linker façon C, ie en désactivant la décoration des fonctions (et donc en déclarant ta dll dans un bloc extern "C", et en spécifiant une convention d'appel __stdcall)
Marsh Posté le 29-09-2004 à 21:28:31
tu pourais me donner un petit exemple stp, j'ai jamais utilisé extern "C"
Marsh Posté le 29-09-2004 à 21:40:33
Harkonnen a écrit : bingo ! |
Telecharge dependency walker et regarde ce qu'exporte ta dll...
http://www.dependencywalker.com/
Marsh Posté le 29-09-2004 à 21:46:59
Ca marche comment ???
quand j'ouvre ma dll, il y a :
HOOK.DLL
KERNEL32.DLL
MSVCRT.DLL
USER32.DLL
et ya aucune de mes fonctions...
Marsh Posté le 29-09-2004 à 21:55:13
blastrock a écrit : tu pourais me donner un petit exemple stp, j'ai jamais utilisé extern "C" |
Code :
|
Marsh Posté le 29-09-2004 à 21:55:44
ha ! j'ai compris faut mettre _declspec(dllexport) devant les fonctions...
maintenant j'ai une fonction qui s'appelle _Z10SetkbdHookv dans dependency, c'est normal ?
Marsh Posté le 29-09-2004 à 21:57:41
le code que tu m'a donné c'est a mettre dans le prog ou dans la dll ?
Marsh Posté le 29-09-2004 à 21:58:14
c'était le cas dans une vieille version du Platform SDK, possible que ça ait changé depuis
HelloWorld a écrit : |
problème de décoration de nom moi je dis
Marsh Posté le 29-09-2004 à 21:59:06
blastrock a écrit : ha ! j'ai compris faut mettre _declspec(dllexport) devant les fonctions... |
et faut mettre la déclaration dans extern "C" aussi
Marsh Posté le 01-10-2004 à 10:27:52
Harkonnen a écrit : bingo ! |
http://msdn.microsoft.com/library/ [...] ibrary.asp
If no file name extension is specified in the lpFileName parameter, the default library extension .dll is appended. However, the file name string can include a trailing point character (.) to indicate that the module name has no extension.
Marsh Posté le 01-10-2004 à 13:00:44
BlackGoddess a écrit : http://msdn.microsoft.com/library/ [...] ibrary.asp |
je savais bien qu'il y avait une subtilité avec les extensions
Marsh Posté le 29-09-2004 à 20:51:01
Salut a tous,
J'ai commencé il n'y a pas longtemps a programmer en graphique sous windows et j'ai un probleme :
J'ai fait une DLL et un prog qui doit charger cette dll, je la charge avec LoadLibrary(NomDuDll) mais je n'arrive pas a utiliser une fonction, GetProcAddress me retourne toujours un pointeur NULL.
Quelqu'un pourrait-il m'aider ?
merci d'avance