c++ loadlibrary
时间: 2023-09-12 08:03:42 浏览: 41
在C++中,使用`LoadLibrary`函数可以加载一个动态链接库(DLL文件),该函数的原型如下:
```c++
HMODULE LoadLibrary(
LPCWSTR lpFileName
);
```
其中,`lpFileName`参数是一个指向包含DLL文件名的字符串指针。
使用`LoadLibrary`函数加载DLL文件后,可以通过`GetProcAddress`函数获取其中导出函数的地址,并使用函数指针进行调用。`GetProcAddress`函数的原型如下:
```c++
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
```
其中,`hModule`参数是DLL模块的句柄,可以通过`LoadLibrary`函数获取。`lpProcName`参数是一个指向导出函数名的字符串指针。
以下是一个简单的示例代码,演示了如何使用`LoadLibrary`和`GetProcAddress`函数加载并调用DLL中的导出函数:
```c++
#include <windows.h>
#include <iostream>
int main()
{
HMODULE hDll = LoadLibrary(L"example.dll");
if (hDll == NULL)
{
std::cout << "Failed to load DLL!" << std::endl;
return 1;
}
FARPROC pfnFunc = GetProcAddress(hDll, "example_func");
if (pfnFunc == NULL)
{
std::cout << "Failed to get function address!" << std::endl;
return 1;
}
typedef int(*EXAMPLE_FUNC)(int);
EXAMPLE_FUNC pfnExampleFunc = reinterpret_cast<EXAMPLE_FUNC>(pfnFunc);
int result = pfnExampleFunc(42);
std::cout << "Result: " << result << std::endl;
FreeLibrary(hDll);
return 0;
}
```
在上面的代码中,`example.dll`是一个包含`example_func`函数的DLL文件。我们使用`LoadLibrary`函数加载该DLL文件,然后使用`GetProcAddress`函数获取`example_func`函数的地址。由于`GetProcAddress`函数返回的是一个`FARPROC`类型的函数指针,我们需要将它转换为实际的函数指针类型,这里使用了一个`typedef`语句定义了一个函数指针类型`EXAMPLE_FUNC`。最后,我们调用`pfnExampleFunc`函数指针来调用`example_func`函数,并输出结果。最后,使用`FreeLibrary`函数卸载DLL文件。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)