调试错误! ESP的值未在函数调用中正确保存

时间:2011-10-05 09:59:17

标签: c

当我尝试运行以下函数时,我得到以下错误。否则,当完成函数的过程时,我收到错误。

 Debug error!

 The value of ESP was not properly saved across a function call. 
 This is usually a    result of calling a function declered with one calling 
 convention with a fonction pğointer declered with a different calling convention.

代码:

 typedef int(*FPROC)(char*,char*,char*,char*,char*,int,int);
 HINSTANCE hDllInstance;
 FPROC pmyfonk;
 hDllInstance = LoadLibrary(TEXT("mydll.dll"));
 if (hDllInstance==NULL) {MessageBox("...dll yok............");
 exit(0);
 }

 pmyfonk=(FPROC)GetProcAddress(hDllInstance,TEXT("myfonk"));
 pmyfonk(TEXT("xxx"),TEXT("xxy"),TEXT("xxz"),NULL,TEXT("xy"),1,1);//this function is working.But,I'm getting upper error.

 FreeLibrary(hDllInstance);

2 个答案:

答案 0 :(得分:3)

默认情况下,使用了__cdecl调用约定。我想你的DLL函数使用__stdcall约定。区别在于堆栈必须由调用者使用__cdecl清理,而被调用者必须使用__stdcall清除。我觉得你搞砸了那样的东西。 Here you can find对这些惯例的良好解释。

答案 1 :(得分:2)

你应该看一下:http://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx

在代码中的某个地方调用约定之间存在不匹配。我是Windows编程的新手,所以我不知道更多,但这显然是错误信息所说的。