我正在尝试用VC ++版本8编写一个应用程序。我有一个DLL,使用依赖walker我得到了DLL可用的API列表。
我能够加载DLL。但是当我试图调用DLL中的一些API时,我会收到此调试错误
“运行时检查失败#0 - ESP的值未在函数调用中正确保存。这通常是调用使用一个调用约定声明的函数,其中函数指针使用不同的调用约定声明。 “
typedef void ( WINAPI *RECEIVE_CALLBACK)int*, int );
typedef void (WINAPI *MYPROC)(RECEIVE_CALLBACK);
.....
.....
handleDll = LoadLibraryW((LPCWSTR)L"Example.dll");
ProcAdd = (MYPROC) GetProcAddress(handleDll, "_DLLAPI_Call1@8");
(ProcAdd) ( (RECEIVE_CALLBACK) ReceiveFunc);
当执行最后一行时,我收到上述错误。可能是什么原因?
答案 0 :(得分:4)
您的MYPROC函数指针声明错误。这个函数有两个参数,而不是一个。您可以从名称的@ 8部分说明,参数值需要8个字节的堆栈空间。使用一个参数(一个4字节指针)调用它将始终使堆栈失衡。
您需要修改您的MYPROC声明。