如何调用DLL api

How to call DLL APIs

本文关键字:DLL api 调用 何调用      更新时间:2023-10-16

我正在尝试用vc++版本8编写一个应用程序。我有一个DLL,使用依赖walker我得到了DLL中可用的api列表。

我能够加载DLL。但是当我试图调用DLL中的一些api时,我会得到这个调试错误

"Run-Time Check Failure #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); 

当最后一行执行时,我得到了上面的错误。原因是什么呢?

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

你需要修正你的MYPROC声明