dulac02
Messages postés15Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention16 août 2004
-
16 août 2004 à 12:05
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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