Dll et pointeur de fonction

Signaler
Messages postés
15
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
16 août 2004
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
salut à tous
J un gros pb avec des pointeurs de fonctions :
Je charge une dll et plus particulièrement une fonction run
celle-ci reçoit commme argument un pointeur de fonction
voici mon bout de code :

executable :
//pointeur donné a run
typedef void (pfn) (char*,bool, bool);

HMODULE hm = 0;

//déclaration du type : pointeur de fonction (il pointera sur "run")
typedef void (*PF) (pfn);

//ce code vient de vieuxlion
int ChargeDll ( char *plugIn )
{
char *buffer = new char[600];

if(hm) //libération de l'ancienne dll
{
int rc = FreeLibrary(hm);
if (!rc) AddText("Erreur FreeLibrary\r\n",0,1);
hm=0;
}
hm = LoadLibrary(plugIn);
if (!hm)
{
AddText("Erreur, Dll non trouvée\r\n",0,1);
return 0;
}
//tous les plug-ins auront la méthode run(pfn)
PF run = (PF)GetProcAddress(hm, "run");
if (run==NULL)
{
strcpy(buffer,"Echec, la dll ");
strcat(buffer,plugIn);
strcat(buffer," n'est pas compatible !\r\n");
AddText(buffer,0,1);
return 0;
}

run(AddText);
return 1;
}

et la dll :

typedef void (pfn) (char*,bool, bool);

extern "C" PLUGIN void run( pfn pf)
{
typedef int (__stdcall* lpAddText) (char* szMsg, bool i , bool o);
lpAddText AddText;
AddText = (lpAddText) pf;
AddText("Petit coucou de la dll",0,1);
}

Lorsque je lance mon exe, j'ai l'erreur suivante :
The value of ESP was not properly saved across a function call, this is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention

Qq'un peut me dire pourquoi ?
Merci d'avance

1 réponse

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si DLL exporte en __stdcall, faut le dire aussi a ton compilo dans le prog qui appelle la fonction.

executable :
//pointeur donné a run
typedef void (__stdcall pfn) (char*,bool, bool);

ciao...
BruNews, Admin CS, MVP Visual C++