C++ 动态库加载卸载函数
时间: 2023-07-28 10:20:40 浏览: 226
在C++中,动态库的加载和卸载可以使用以下函数:
1. `LoadLibrary`:用于加载动态链接库,其原型如下:
```c++
HMODULE LoadLibrary(
LPCWSTR lpLibFileName
);
```
其中,`lpLibFileName`参数是一个指向动态链接库文件名的字符串,可以是一个绝对路径或相对路径。如果加载成功,该函数将返回一个指向该动态链接库的句柄,否则返回NULL。
2. `GetProcAddress`:用于获取动态链接库中的函数地址,其原型如下:
```c++
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
```
其中,`hModule`参数是一个指向动态链接库的句柄,`lpProcName`参数是一个指向函数名的字符串。如果获取成功,该函数将返回指向该函数的指针,否则返回NULL。
3. `FreeLibrary`:用于卸载动态链接库,其原型如下:
```c++
BOOL FreeLibrary(
HMODULE hLibModule
);
```
其中,`hLibModule`参数是一个指向动态链接库的句柄。如果卸载成功,该函数将返回TRUE,否则返回FALSE。
需要注意的是,在使用动态链接库时,需要在使用完毕后及时卸载,以释放相应的资源。同时,需要注意动态链接库的加载和卸载顺序,避免出现资源泄漏等问题。
相关问题
c++ 加载动态库
在C++中,可以使用动态链接库(Dynamic Link Library,DLL)来实现动态加载和卸载代码,从而实现更灵活的程序设计和扩展功能。
以下是加载动态库的基本步骤:
1. 使用 `LoadLibrary()` 函数加载动态库,该函数返回一个句柄(`HMODULE`)。
```c++
#include <windows.h>
HMODULE hDll = LoadLibrary(TEXT("MyDll.dll"));
```
2. 如果加载成功,可以使用 `GetProcAddress()` 函数获取动态库中导出函数的地址。
```c++
#include <windows.h>
typedef int (*PFunc)(int, int); // 定义函数指针类型
PFunc pAdd = (PFunc)GetProcAddress(hDll, "Add"); // 获取函数地址
```
3. 调用导出函数。
```c++
int result = pAdd(1, 2); // 调用函数
```
4. 使用 `FreeLibrary()` 函数释放动态库。
```c++
FreeLibrary(hDll); // 释放动态库
```
需要注意的是,动态库中的函数必须使用 `__declspec(dllexport)` 关键字进行导出,例如:
```c++
__declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
```
C++ 加载动态库
在C++中,可以使用动态链接库(Dynamic Link Library,DLL)来实现动态加载和卸载代码,从而实现更灵活的程序设计和扩展功能。
以下是加载动态库的基本步骤:
1. 使用 `LoadLibrary()` 函数加载动态库,该函数返回一个句柄(`HMODULE`)。
```c++
#include <windows.h>
HMODULE hDll = LoadLibrary(TEXT("MyDll.dll"));
```
2. 如果加载成功,可以使用 `GetProcAddress()` 函数获取动态库中导出函数的地址。
```c++
#include <windows.h>
typedef int (*PFunc)(int, int); // 定义函数指针类型
PFunc pAdd = (PFunc)GetProcAddress(hDll, "Add"); // 获取函数地址
```
3. 调用导出函数。
```c++
int result = pAdd(1, 2); // 调用函数
```
4. 使用 `FreeLibrary()` 函数释放动态库。
```c++
FreeLibrary(hDll); // 释放动态库
```
需要注意的是,动态库中的函数必须使用 `__declspec(dllexport)` 关键字进行导出,例如:
```c++
__declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
```