GetProcAddress d'une procédure dans une Dll

Résolu
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010 - 2 juil. 2010 à 12:32
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010 - 5 juil. 2010 à 12:09
bonjour,

j'essaie d'appeler une procédure dans une DLL,
mais GetProcAddress me retourne 0

programme principal :
dll	DWORD ?
fnct	DWORD ?
Window1Procedure Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
.If uMsg == WM_CREATE
Invoke LoadLibrary, TextAddr("nom de la dll.dll")
Mov dll, Eax
Invoke GetProcAddress, hDll, TextAddr("dllActif")
Mov fnct, Eax
...


la dll :
...
hInst	HINSTANCE	?
DllEntryPoint Proc Private hInstance:HINSTANCE, dwReason:DWord, lpvReserved:LPVOID
.If dwReason == DLL_PROCESS_ATTACH
Mov Eax, hInstance
Mov hInst, Eax
Invoke SetWindowsHookEx, WH_KEYBOARD, Addr HookProc, hInst, 0
...
Return True
DllEntryPoint EndP
HookProc Proc Private nCode:DWord, wParam:DWord, lParam:DWord
"traitements" : qui fonctionnent 
Ret
HookProc EndP
dllActif Proc
"traitements"...
Ret
dllActif EndP
End DllEntryPoint


j'ai oublié quelque chose, mais quoi ?

j'utilise "Easy Code Masm", qui me plait
beaucoup, mais ce doit être sans importance.

merci d'avance.

11 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
2 juil. 2010 à 20:23
Ceci devrait fonctionner ...
hDll	DWORD	0
Fnct	DWORD	0

Window1Procedure Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
.If uMsg == WM_CREATE
Invoke LoadLibrary, TextAddr("nom de la dll.dll")
Mov dword ptr [hDll], eax
Invoke GetProcAddress, dword ptr [hDll], TextAddr("dllActif")
Mov dword ptr [Fnct], eax
...


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
4 juil. 2010 à 19:20
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
5 juil. 2010 à 12:09
je vais de comprendre (?)
un fichier .def est nécessaire !
avec ( pour moi ) :

LIBRARY nom de la dll
EXPORTS nom des procedure

pouf....

merci de vos aides,
rest tout à faire maintenant.
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
3 juil. 2010 à 08:37
merci de ton intervention, mais non.
c'est bien EAX qui est = 0
et d'ailleurs
Invoke LoadLibrary, TextAddr("nom de la dll.dll")
Mov dll, Eax
ça, ça fonctionne sans souci.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
3 juil. 2010 à 08:42
avec la "syntaxe" proposée, l'appel
à la DLL ne fonctionne plus ;o(
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
3 juil. 2010 à 08:46
désolé, ne pas tenir compte de ce dernier message,
l'appel à la dll fonctionne, mais pas l'appel
à la procédure car
Invoke GetProcAddress, DWord Ptr [hDll], TextAddr("dllActif")
retourne 0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
4 juil. 2010 à 08:36
salut,


ta fonction est elle déclarée en export de ta dll.

objdump est ton ami.


@++
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
4 juil. 2010 à 11:02
>>ta fonction est elle déclarée en export de ta dll.
euh ... non, je ne pense pas (?)
on fait cela comment ?
il y a l'extrait de ce que je fais dans la dll :
...
hInst	HINSTANCE	?
DllEntryPoint Proc Private hInstance:HINSTANCE, dwReason:DWord, lpvReserved:LPVOID
.If dwReason == DLL_PROCESS_ATTACH
Mov Eax, hInstance
Mov hInst, Eax
Invoke SetWindowsHookEx, WH_KEYBOARD, Addr HookProc, hInst, 0
...
Return True
DllEntryPoint EndP
HookProc Proc Private nCode:DWord, wParam:DWord, lParam:DWord
"traitements" : qui fonctionnent 
Ret
HookProc EndP
dllActif Proc
"traitements"...
Ret
dllActif EndP
End DllEntryPoint
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
4 juil. 2010 à 13:27
si je fais :
...
DllEntryPoint Proc Private hInstance:HINSTANCE, dwReason:DWord, lpvReserved:LPVOID
...
dllActif Proc Export
...
Ret
dllActif EndP
End DllEntryPoint
===> erreur de compil

Compiling resources...
Assembling: Module1
Module1.asm(29) : error A2111: conflicting parameter definition

si je fais :
...
DllEntryPoint Proc Private hInstance:HINSTANCE, dwReason:DWord, lpvReserved:LPVOID
...
End DllEntryPoint
dllActif Proc Export
...
Ret
dllActif EndP

pas d'erreur de compil,
mais Invoke GetProcAddress, DWord Ptr [hDll], TextAddr("dllActif")
retourne encore 0

désolé de mes temps de réponse, mais
j'ai quelques autres préoccupations

merci de vos aides.
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
5 juil. 2010 à 08:58
je récupère tout cela, je lis, je tente de comprendre et de mettre en oeuvre... et je reviens si je n'y parviens pas ;o)
merci patatalo.
cs_biloute54 Messages postés 19 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 30 octobre 2010
5 juil. 2010 à 11:47
bon, ben, dans la documentation,
je lis comment faire pour utiliser
une dll, mais pas comment la créer.
et dans l'exemple pareil...
j'ai rien compris ?
Rejoignez-nous