动态获取API函数地址
时间: 2024-01-03 10:03:55 浏览: 28
在 C++ 中,可以使用 `GetProcAddress` 函数动态获取 DLL 文件中导出函数的地址。该函数需要两个参数,第一个参数是 DLL 文件的句柄,第二个参数是导出函数的名称。
下面是一个简单的示例,演示如何动态获取 `kernel32.dll` 中的 `MessageBoxA` 函数的地址:
```cpp
#include <iostream>
#include <Windows.h>
int main()
{
// 加载 kernel32.dll
HMODULE hModule = LoadLibraryA("kernel32.dll");
if (hModule)
{
// 获取 MessageBoxA 函数的地址
FARPROC pMessageBoxA = GetProcAddress(hModule, "MessageBoxA");
if (pMessageBoxA)
{
// 调用 MessageBoxA 函数
int ret = ((int(__stdcall*)(HWND, LPCSTR, LPCSTR, UINT))pMessageBoxA)(NULL, "Hello, world!", "Message", MB_OK);
std::cout << "MessageBoxA returned " << ret << std::endl;
}
else
{
std::cerr << "Failed to get address of MessageBoxA" << std::endl;
}
// 卸载 DLL
FreeLibrary(hModule);
}
else
{
std::cerr << "Failed to load kernel32.dll" << std::endl;
}
return 0;
}
```
需要注意的是,不同的操作系统和编译器可能对函数调用方式有所不同,因此在实际应用中需要根据具体情况进行适当的修改。