Uttilisation la fonction d'une DLL

Signaler
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
29 juin 2006
-
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
29 juin 2006
-
Pour ce faire, j'ai lu msdn, codes-sources et j'en suis arrivé à ceci:



[FONCTION DLL]

extern "C" __declspec(dllexport) int tests(int test)

{

return test;

}





[EXE]

void loadfunc(void)

{

int testa;

HINSTANCE mdll;

mdll=LoadLibrary("ma_dll.dll");

typedef int (__stdcall* FUNCPROC)(int test);

FUNCPROC mfunc;

mfunc = (FUNCPROC)GetProcAddress((HINSTANCE)mdll,"tests");

testa=((mfunc)(5));

printf("Test: %d\n",testa);

}





Le printf fonctionne bien, mais je reçois une erreur fatal quand j'execute l'exe.

Quand je debug l'erreur, c'est toujours à l'offset 00000005 que ça foire ..

L'exe contient QUE l'appel de la dll, et l'erreur fatal n'apparait plus
quand je n'uttilise aucun argument dans la fonction de dll



J'ai vraiment tout essayé depuis 2 jours, je ne vois pas qu'est ce qui pourrai faire planter ce foutu code ..

7 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Dans la DLL, tu as oublié de mettre tests en __stdcall, c'est peut être ca
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
29 juin 2006

Avec

extern "C" __stdcall int tests(int test)

ou

__stdcall int tests(int test)






Il retourne meme pas le resultat, et il plante

Et puis je pense que
extern "C" __declspec(dllexport) est la décoration qui marche (normalement ..)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
extern "C" __declspec(dllexport) int __stdcall tests(int test)
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
29 juin 2006

Toujours pas, il ne me retourne pas le resultat avec cet deco
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Ah bon? Que vaut testa dans le printf?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
J'avais oublié qu'en __stdcall les noms de fonctions sont modifiés, a
la place de tests tu dois mettre "_tests@4". Sinon tu peux enlever tous
les __stdcall (typedef int (* FUNCPROC)(int test);) et dans ce cas le
nom de la fonction est "tests"



Dnas ton code de départ, tu avais donc juste un __stdcall en trop dans la définition de FUNCPROC
Messages postés
7
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
29 juin 2006

Je te remercis beaucoup !

msdn sur ce sujet n'a pas été aussi explicite =)