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);