1

我正在尝试在 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); 

执行最后一行时,我收到上述错误。可能是什么原因?

4

1 回答 1

4

您的 MYPROC 函数指针声明是错误的。这个函数有两个参数,而不是一个。从名称的@8 部分可以看出,参数值需要 8 个字节的堆栈空间。用一个参数调用它,一个 4 字节的指针,总是会使堆栈不平衡。

您需要修复您的 MYPROC 声明。

于 2013-03-22T14:27:07.587 回答