C 调试错误!函数调用中未正确保存ESP的值
当我尝试运行下面的函数时,我收到了下面的错误消息。否则,当完成函数过程时,我收到了错误消息C 调试错误!函数调用中未正确保存ESP的值,c,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
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.
代码:
您应该查看以下内容:
代码中某个地方的调用约定不匹配。我是windows编程新手,所以我知道的不多,但这显然是错误消息告诉我的。您应该检查以下内容:
代码中某个地方的调用约定不匹配。我是windows编程新手,所以我知道的不多,但这显然是错误消息告诉我的。默认情况下,使用了u cdecl调用约定。我想您的DLL函数使用了u stdcall约定。区别在于堆栈必须由调用方使用_cdecl和被调用方使用_stdcall清理。我想你把这样的事情搞砸了。很好地解释了这些惯例 默认情况下,使用了_ucdecl调用约定。我想您的DLL函数使用了u stdcall约定。区别在于堆栈必须由调用方使用_cdecl和被调用方使用_stdcall清理。我想你把这样的事情搞砸了。很好地解释了这些惯例 能否显示DLL中的函数声明?@user98020实际上没有unicode版本的
GetProcAddress
,因此不应将TEXT()
宏用于其第二个参数。此外,由于函数类型FPROC
仅接受char*
,因此在调用pmyfonk
时也不应使用宏,否则在设置UNICODE
时,生成将失败。能否显示DLL中的函数声明?@user98020实际上没有GetProcAddress
的UNICODE版本,因此,不应将TEXT()
宏用于其第二个参数。此外,由于函数类型FPROC
仅接受char*
,因此在调用pmyfonk
时也不应使用宏,否则在设置UNICODE
时生成将失败。myfonk的签名不是FPROC,他可能缺少\uu cdecl
或\uu stdcall
,不确定是哪个。myfonk的签名不是FPROC,他可能缺少\uuuu cdecl
或\uu stdcall
,不确定是哪个。
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);