Message d'erreur incompréhensible

CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 29 janv. 2004 à 10:47
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 30 janv. 2004 à 17:40
Lorsque je compile mon programme en debug avec vc++ 6, j'obtient des erreurs lors des tests, les voici (ce sont tous les mêmes) :

The value of ESP was not properly saved accross a function call. This is usually the result of calling a function with one calling convention with a function pointer declared with a different calling convention.

Tout fonctionne correctement à part ce message d'erreur. En release, le programme plante complètement.

J'utilise effectivement un pointeur vers une fonction, mais ce sont les mêmes "calling convention".

Le pointeur : typedef int (__stdcall* lpFuncType)(char***&); lpFuncType ListFct;

La fonction : extern "C" __declspec(dllexport) int ListFunctions1078(char***& info);

(note : la fonction est dans une dll "dynamique" et le pointeur dans le programme principal)

CyberP,
Celui qui dit que toute question a une réponse

6 réponses

hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
29 janv. 2004 à 11:24
moi ce que je vois de différent, c'est : __stdcall et __declspec
il faut que tu changes la convention d'appel dans les propriétés du projet
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
29 janv. 2004 à 17:46
Euh.. je n'y connais rien là dedans...

(note : il y avait une autre erreur c'est que j'avais inversé l'ordre des paramètres, mais la corriger n'a rien changé)

Le __stdcall et __declspec j'avais juste fait un copier-coller, je ne vois pas trop ce que c'est en fait...

CyberP,
Celui qui dit que toute question a une réponse
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
29 janv. 2004 à 17:57
J'ai mis la convention d'appel de la dll en __stdcall mais maintenant, mon programme n'arrive pas à trouver la fonction dans la dll.

C'est à dire que ceci ne marche pas : dllFction = (fctionType)GetProcAddress((HINSTANCE)hModDll, fctionName);

CyberP,
Celui qui dit que toute question a une réponse
0
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
30 janv. 2004 à 09:47
Est-ce que ta définition est bonne ?

voila comment je fais pour charger une dll :

typedef long (WINAPI *Fn_Tiff_GetImage)(char *, PUCHAR ); 
extern Fn_Tiff_GetImage pTiff_GetImage; 

Fn_Tiff_GetImage pTiff_GetImage= NULL; 

HINSTANCE instance_Tiff_process = NULL; 

instance_Tiff_process = LoadLibrary("Tiff_process.dll"); 
if (instance_Tiff_process) 
{        
      pTiff_GetImage= (Fn_Tiff_GetImage) GetProcAddress (instance_Tiff_process, "Tiff_GetImage"); 
} 


exemple à adapter bien sur ...
0

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

Posez votre question
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
30 janv. 2004 à 17:35
Oui, je fais exactement comme toi hilairenicolas... c'est vraiment bizarre

CyberP,
Celui qui dit que toute question a une réponse
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
30 janv. 2004 à 17:40
Au bout de 30 minutes d'essais, j'ai mis partout __cdecl et cela fonctionne... Mais je ne vois toujours pas ce qui avait pu se passer

CyberP,
Celui qui dit que toute question a une réponse
0
Rejoignez-nous