这个项目演示了如何在Windows环境下使用CMake配置和构建动态链接库(DLL),并在主程序中通过头文件直接引入使用。
WindowsDLLExample/
├── CMakeLists.txt # CMake配置文件
├── build.bat # Windows构建脚本
├── README.md # 项目说明
├── include/
│ └── MathLibrary.h # 库头文件
└── src/
├── MathLibrary.cpp # 库实现文件
└── main.cpp # 主程序
- 静态链接配置: 在CMakeLists.txt中直接配置DLL链接
- Windows DLL导出: 使用
__declspec(dllexport/dllimport) - 纯C++接口: 提供面向对象的C++接口
- 异常处理: 演示DLL中的异常处理
- 自动DLL复制: 构建后自动复制DLL到可执行文件目录
- Windows 10/11
- Visual Studio 2019/2022 (包含C++工具)
- CMake 3.16+
build.batmkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release构建完成后,可执行文件位于:
build/bin/Release/MainApp.exe
DLL文件会自动复制到同一目录。
- 使用
add_library(MathLibrary SHARED ...)创建DLL - 使用
target_link_libraries(MainApp PRIVATE MathLibrary)链接库 - 使用
add_custom_command自动复制DLL
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif主程序只需要:
#include "MathLibrary.h"无需手动加载DLL,链接器会自动处理。
Windows DLL Example - Math Library Demo
=======================================
Library Version: MathLibrary v1.0.0
Basic Operations:
10.5 + 3.2 = 13.7
10.5 - 3.2 = 7.3
10.5 * 3.2 = 33.6
10.5 / 3.2 = 3.28125
Advanced Operations:
10.5 ^ 3.2 = 1801.14
sqrt(10.5) = 3.24037
Exception Handling Test:
Caught exception: Division by zero is not allowed.
Caught exception: Square root of negative number is not allowed.
- 确保Visual Studio已安装C++开发工具
- 如果使用不同版本的Visual Studio,请修改build.bat中的生成器名称
- DLL和EXE必须使用相同的运行时库版本
- 发布时需要同时提供EXE和DLL文件