Dans le standard C c'est celui qui 'PUSH' qui remonte ESP.
Avec stdcall (WINAPI) c'est la fonction appelee qui remonte ESP par: ret nbrParams*4
BruNews, ciao...
-------------------------------
Réponse au message :
-------------------------------
> Ton problème vient certainement du fait que le Pascal et le C n'utiilisent pas les mêmes conventions pour l'appel de fonctions.
>
> Les paramètres de la fonction sont PUSHés pour être transmis au CALL. Il faut ensuite ré-équilibrer la pile, c'est-à-dire supprimer de la pile tous ces paramètres après le CALL. La convention d'appel de fonctions en C, ré-équilibre la pile à la sortie du CALL (dans le RET) alors que pour la convention Pascal, c'est à l'appelant de le faire (ré-ajustement du stack pointer après le CALL). Je suis sûr des mécanismes mais il est possible que je me sois trompé entre conventions C et Pascal.
>
> Pour corriger ton problème, soit changer la déclaration de la fonction (WINAPI) soit changer la déclaration dans Delphi.
>
> Kaid -
kaid.fr.st>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Voilà, j'ai créé une DLL dont une fonction demande en paramètre une callback.
> >
> > Voici comment j'ai défini la callback :
> >
> > typedef struct _TCallBackRec {
> >
> > int Action;
> > int Tbl;
> > float Progression;
> > int TempEcoule;
> >
> > } TCallBackRec, *PCallBackRec;
> >
> > typedef int (WINAPI *TWPCallBack)(const TCallBackRec Arg);
> >
> > Donc le programme qui appel cette dll est en delphi.
> >
> > voici la callback :
> >
> > type TWPCallBacl = function(const Arg: TCallBackRec): Integer; stdcall;
> >
> > Dès le premier appel de la callback, il se passe sans erreur, sauf qu'au moment du retour, vc++ (version 6) me met un message d'erreur :
> >
> > Msg : "Debug error !
> > File: i386\chkesp.c
> > Line 42
> >
> > The value of ESP was not properly saved across a fonction 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"
> >
> > Voilà, je ne comprend pas pourquoi j'ai ce message. J'ai pourtant bien mis stdcall; en delphi, mais j'ai toujours ce message !
> >
> > Lors du deuxieme appel, mon prog plante, c'est là que je compren plus !
> >
> > Merci de votre aide
> >
> > Bye
> >
> > \* -- Seb [
Mail] [
Web] -- */
>