GetProcAddress d'une procédure dans une Dll [Résolu]

Signaler
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010
-
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010
-
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

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
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
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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.
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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.
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

avec la "syntaxe" proposée, l'appel
à la DLL ne fonctionne plus ;o(
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,


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

objdump est ton ami.


@++
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

>>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
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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.
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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.
Messages postés
19
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
30 octobre 2010

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 ?