太多新手 C++ 程序员私信问我要如何创建动态链接库,这个视频我就手把手教你在 VS 下创建并使用动态链接库。
1. 创建动态链接库项目
- 打开 Visual Studio
- 创建新项目 → 选择 C++
- 平台选择 Windows(这里以 Windows 为例)
- 项目模板选择:Dynamic-link Library (DLL)
- 填写项目名称和保存路径 → 点击「创建」

创建完成后,你会得到一个最简 DLL 项目,默认已经包含了 DllMain 入口函数。
2. 编写导出接口头文件(mydll.h)
VS 已经帮你生成好了头文件,我们在此基础上完善导出宏和函数声明:
#pragma once
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
// 使用 extern "C" 防止 C++ 名称改编(name mangling)
// 非常重要!尤其是给 C 语言或其他语言调用时必须加
extern "C" MYDLL_API double Add(double a, double b);
extern "C" MYDLL_API double Multiply(double a, double b);
extern "C" MYDLL_API double Power(double base, double exp);
关键点解释:
#pragma once:头文件防重包含MYDLL_EXPORTS:创建 DLL 项目时,VS 已经自动在「预处理器定义」里添加了这个宏,所以在 DLL 项目中MYDLL_API会展开成__declspec(dllexport)- 在使用 DLL 的项目中没有这个宏,所以会展开成
__declspec(dllimport) extern "C":让导出函数名保持原始 C 风格,不被 C++ 编译器改编
3. 实现导出函数(mydll.cpp)
// mydll.cpp
#include "mydll.h"
#include <cmath>
extern "C" MYDLL_API double Add(double a, double b)
{
return a + b;
}
extern "C" MYDLL_API double Multiply(double a, double b)
{
return a * b;
}
extern "C" MYDLL_API double Power(double base, double exp)
{
return std::pow(base, exp);
}
编译生成解决方案 → 在 Debug 或 Release 目录下会得到:
- MyDLL.dll:真正的动态链接库,运行时加载
- MyDLL.lib:导入库(隐式链接时需要)
4. 创建测试程序(控制台应用)
- 在同一解决方案中 → 右键解决方案 → 添加 → 新建项目
- 选择 Console App(控制台应用程序)
- 创建完成
5. 在测试程序中使用 DLL(隐式链接方式)
步骤 1:添加头文件搜索路径
项目属性 → C/C++ → 常规 → 附加包含目录 → 添加 DLL 项目的目录(包含 mydll.h 的路径)
步骤 2:添加库文件搜索路径
项目属性 → 链接器 → 常规 → 附加库目录 → 添加 DLL 生成的 .lib 文件所在目录
步骤 3:添加依赖的 .lib 文件
项目属性 → 链接器 → 输入 → 附加依赖项 → 添加 MyDLL.lib
步骤 4:编写测试代码
#include <iostream>
#include "mydll.h"
int main()
{
std::cout << "3 + 5 = " << Add(3, 5) << std::endl;
std::cout << "4 * 7 = " << Multiply(4, 7) << std::endl;
std::cout << "2^10 = " << Power(2, 10) << std::endl;
return 0;
}
步骤 5:编译运行
确保 MyDLL.dll 在可执行文件同目录下,或者已放入系统路径,否则运行时会提示找不到 DLL。
6. 发布时需要提供哪些文件?
| 链接方式 | 需要提供的文件 |
|---|---|
| 隐式链接(C/C++ 最常见) | MyDLL.dll + MyDLL.lib + mydll.h |
| 显式链接(LoadLibrary + GetProcAddress) | 仅需 MyDLL.dll |
| 给其他语言(如 C#, Python, Delphi 等)使用 | 强烈建议加 extern "C",只提供 .dll(显式加载)或配合 P/Invoke |
总结
现在你已经完整掌握了在 Visual Studio 中:
- 创建 DLL 项目
- 正确导出函数(带
extern "C"和导出宏) - 在另一个项目中通过隐式链接使用 DLL
怎么样,现在你学会了吗?赶快动手试试吧~


