Visual Studio 使用C++制作DLL 库
Visual Studio 使用C++制作DLL 库
一、为什么需要 DLL?
.dll文件是Dynamic Link Library(动态链接库)文件的缩写,它是一种共享库文件,包含了程序所需的代码和数据。
与静态链接库不同,动态链接库可以在程序运行时动态加载,使得程序的内存占用更小,同时也方便了程序的更新和维护。

编程中的 DLL:
-
- DLL (Dynamic Link Library) 是一个包含代码和数据的文件,可以被多个程序同时使用。
- 优点:
- 代码复用:多个程序可以共享同一个 DLL,减少磁盘和内存占用。
- 模块化开发:不同团队可以独立开发 DLL,然后集成到主程序中。
- 便于更新:只需更新 DLL 文件,无需重新编译整个程序。
常见应用场景:
二、DLL 与普通程序的区别
| 特性 | 普通可执行文件 (.exe) | DLL 文件 (.dll) |
|---|---|---|
| 是否可以独立运行? | ✅ 可以直接双击运行 | ❌ 必须由其他程序加载和调用 |
| 入口函数 | main() 或 WinMain() |
无显式入口,由系统自动初始化 |
| 用途 | 独立应用程序 | 为其他程序提供功能 |
| 加载方式 | 程序启动时一次性加载 | 动态加载(按需加载) |
三、DLL 的核心概念
1.导出与导入
- 导出 (Export):DLL 中哪些函数或变量可以被外部访问。
- 导入 (Import):程序如何使用 DLL 中的导出内容。
2.__declspec(dllexport) 关键字
作用:告诉编译器 “这个函数 / 类 / 变量要导出到 DLL 中,让外部程序可以使用”。
示例:
// 导出一个加法函数
__declspec(dllexport) int Add(int a, int b) {
return a + b;
}
3.导出表 (Export Table)
DLL 文件内部有一张 “清单”,记录了所有导出的函数和变量。
可以用工具(如 Visual Studio 的 dumpbin 命令)查看导出表:
dumpbin /exports MyDLL.dll
4.C++ 名称修饰 (Name Mangling)
C++ 为支持函数重载,会将函数名修改为包含参数类型和返回值的复杂名称(如 Add(int, int) 可能变成 ?Add@@YAHHH@Z)。
问题:其他语言(如 C#)无法识别这种名称。
解决方案:使用 extern "C" 保持 C 语言的命名方式:
extern "C" __declspec(dllexport) int Add(int a, int b);

浙公网安备 33010602011771号