当我尝试运行以下函数时,我得到以下错误。否则,当完成函数的过程时,我收到错误。
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);
答案 0 :(得分:3)
默认情况下,使用了__cdecl调用约定。我想你的DLL函数使用__stdcall约定。区别在于堆栈必须由调用者使用__cdecl清理,而被调用者必须使用__stdcall清除。我觉得你搞砸了那样的东西。 Here you can find对这些惯例的良好解释。
答案 1 :(得分:2)
你应该看一下:http://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx
在代码中的某个地方调用约定之间存在不匹配。我是Windows编程的新手,所以我不知道更多,但这显然是错误信息所说的。