Skip to content

dlmodric/buddy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Windows DLL 示例项目

这个项目演示了如何在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+

构建步骤

方法1: 使用批处理脚本

build.bat

方法2: 手动构建

mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release

运行

构建完成后,可执行文件位于:

build/bin/Release/MainApp.exe

DLL文件会自动复制到同一目录。

关键技术点

1. CMakeLists.txt配置

  • 使用add_library(MathLibrary SHARED ...)创建DLL
  • 使用target_link_libraries(MainApp PRIVATE MathLibrary)链接库
  • 使用add_custom_command自动复制DLL

2. Windows DLL导出

#ifdef MATHLIBRARY_EXPORTS
    #define MATHLIBRARY_API __declspec(dllexport)
#else
    #define MATHLIBRARY_API __declspec(dllimport)
#endif

3. 头文件引入

主程序只需要:

#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.

注意事项

  1. 确保Visual Studio已安装C++开发工具
  2. 如果使用不同版本的Visual Studio,请修改build.bat中的生成器名称
  3. DLL和EXE必须使用相同的运行时库版本
  4. 发布时需要同时提供EXE和DLL文件

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published