1. 动态链接库基础概念
动态链接库(Dynamic Link Library,简称DLL)是Windows系统中实现代码共享的重要机制。与静态库不同,动态库在程序运行时才被加载到内存,多个程序可以共享同一个DLL实例,这大大节省了系统资源。
在Windows平台上,动态链接库通常以.dll为扩展名,而在Linux/Unix系统中则使用.so(Shared Object)文件。动态库的核心优势在于:
- 节省内存空间:多个程序可以共享同一个DLL的代码段
- 便于更新维护:更新DLL无需重新编译整个程序
- 模块化开发:不同团队可以独立开发各自的DLL模块
注意:在Windows下开发DLL时,必须考虑DLL的导出方式。C++由于名称修饰(Name Mangling)机制,直接导出的函数名会被编译器修改,这会导致跨编译器调用时出现问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Visual Studio创建DLL项目
2.1 新建DLL项目
在Visual Studio中创建DLL项目的步骤如下:
- 选择"文件"→"新建"→"项目"
- 选择"Windows桌面"→"动态链接库(DLL)"
- 设置项目名称和位置后点击"确定"
VS会自动生成一个包含DllMain函数的模板项目。DllMain是DLL的入口点,类似于exe中的main函数,它会在DLL被加载和卸载时被调用。
2.2 基本项目配置
创建项目后,需要进行一些基本配置:
cpp复制// 预编译头设置
#include "pch.h"
// 导出宏定义
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
这种导出方式利用了预处理器宏,在编译DLL时定义MATHLIBRARY_EXPORTS,这样代码中的MATHLIBRARY_API就会被展开为__declspec(dllexport);而在使用DLL的客户端代码中,不定义这个宏,MATHLIBRARY_API就会被展开为__declspec(dllimport)。
