FARPROC funcPtr = GetProcAddress(hDll, "function_name");动态加载dll,如何转换funcPtr成自己定义的函数类型呢?
时间: 2024-12-08 10:19:55 浏览: 11
动态调用DLL函数.rar
要将`FARPROC`类型的函数指针转换为自己定义的函数类型,通常的做法是在编译时使用`typedef`来声明一个新的类型,该类型与`FARPROC`兼容但具有更强的类型安全。假设你有一个自定义的函数原型`void MyFunctionType(void* param)`,你可以这样做[^1]:
```cpp
// 定义新的函数类型
typedef void (*MyFunctionType)(void*);
// 动态加载DLL并找到函数地址
HMODULE hDll = LoadLibrary(L"your_dll_path.dll");
if (hDll)
{
FARPROC funcPtr = GetProcAddress(hDll, "function_name");
if (funcPtr)
{
// 转换并调用
MyFunctionType myFunc = reinterpret_cast<MyFunctionType>(funcPtr);
myFunc(some_argument); // 使用新类型的指针调用
}
else
{
// 函数未找到
// ...
}
FreeLibrary(hDll); // 释放DLL句柄
}
else
{
// 加载失败
// ...
}
```
这里的关键是`reinterpret_cast`,它允许你在运行时改变指针的类型。
阅读全文