如何调用DLL API

时间:2013-03-22 11:30:35

标签: c++ winapi visual-c++

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

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

1 个答案:

答案 0 :(得分:4)

您的MYPROC函数指针声明错误。这个函数有两个参数,而不是一个。您可以从名称的@ 8部分说明,参数值需要8个字节的堆栈空间。使用一个参数(一个4字节指针)调用它将始终使堆栈失衡。

您需要修改您的MYPROC声明。