Uttilisation la fonction d'une DLL

aDebhian Messages postés 7 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 29 juin 2006 - 5 mai 2005 à 11:09
aDebhian Messages postés 7 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 29 juin 2006 - 5 mai 2005 à 14:49
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 11:30
Dans la DLL, tu as oublié de mettre tests en __stdcall, c'est peut être ca
0
aDebhian Messages postés 7 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 29 juin 2006
5 mai 2005 à 11:35
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 ..)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 12:08
extern "C" __declspec(dllexport) int __stdcall tests(int test)
0
aDebhian Messages postés 7 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 29 juin 2006
5 mai 2005 à 12:51
Toujours pas, il ne me retourne pas le resultat avec cet deco
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 13:21
Ah bon? Que vaut testa dans le printf?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 13:33
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
0
aDebhian Messages postés 7 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 29 juin 2006
5 mai 2005 à 14:49
Je te remercis beaucoup !

msdn sur ce sujet n'a pas été aussi explicite =)
0
Rejoignez-nous