c++ 加载动态库
时间: 2023-08-03 16:18:06 浏览: 58
在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;
}
```
c++ cmake动态库
CMake是一个跨平台的构建工具,它可以用于自动生成各种不同平台的构建脚本。通过使用CMake,我们可以更方便地管理和构建C++项目。
动态库(也称为共享库)是一种在程序运行时加载的库,它可以被多个程序共享使用。CMake可以帮助我们创建和构建动态库。
下面是一个使用CMake构建C++动态库的示例:
1. 创建一个名为`hello.cpp`的源文件,内容如下:
```cpp
#include "hello.h"
#include <iostream>
using namespace std;
void HelloFunc() {
cout << "Hello World" << endl;
}
```
2. 创建一个名为`hello.h`的头文件,内容如下:
```cpp
#ifndef HELLO_H
#define HELLO_H
void HelloFunc();
#endif
```
3. 创建一个名为`CMakeLists.txt`的文件,内容如下:
```cmake
cmake_minimum_required(VERSION 3.10)
project(HelloLibrary)
set(SOURCES hello.cpp)
add_library(HelloLibrary SHARED ${SOURCES})
```
4. 打开终端,进入项目目录,执行以下命令来构建动态库:
```shell
mkdir build
cd build
cmake ..
make
```
5. 构建完成后,会在`build`目录下生成一个名为`libHelloLibrary.so`的动态库文件。
这样,你就成功地使用CMake构建了一个C++动态库。