Dll et pointeur de fonction

dulac02 Messages postés 15 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 16 août 2004 - 16 août 2004 à 12:05
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 16 août 2004 à 12:29
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 août 2004 à 12:29
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++
0
Rejoignez-nous