(本文包含:使用VS生成DLL,代码调试,查看DLL内容,更改DLL文件名,模块定义文件)
.使用Visual Studio生成动态链接库的总体流程如下:
1. 文件 -> 新建 -> 项目
2. 模板中选择 Visual C++ Win32 控制台应用程序,确认。
3. 在Win32 应用程序类型选择 DLL,附加选项勾选空项目,点击完成。
4. 编写程序,添加到解决方案的源文件中。
#include <iostream>
__declspec(dllexport) void say_hello()
{
std::cout << "Hello world!" << std::endl;
}
int main()
{
say_hello();
return 0;
}
5. 如果代码无需进行测试,此时即可可生成解决方案(生成->生成解决方案 或者 CTRL+SHIFT+B)。
6. 若代码较为复杂,就需要对代码或者生成的进行调试。有很多种对DLL进行调试的方法,在此不一一赘述。
若希望使用当前工程进行调试代码,就需要生成可执行文件。(注意:此处的调试是对代码进行调试,而非DLL,此步骤的目的是为了验证代码)
首先在项目的属性页中添加一个解决方案配置,从之前的debug里复制设置。
7. 将配置属性 -> 常规 -> 项目默认值 -> 配置类型修改为应用程序.exe,
配置属性 -> 链接器 -> 系统 -> 子系统 修改为控制台(/SUBSYSTEM:CONSOLE)。
8. 运行程序,可以看到输出的结果。
9. 确保代码无误以后,将配置切换为debug,并生成解决方案,即可得到动态链接库。
10. 修改动态链接库的文件名的步骤:配置属性 -> 常规 -> 目标文件名
11. 生成动态链接库以后,如果希望对动态链接库的内容进行确认,可以使用VS 自带的 dumpbin来查看dll的函数及参数。
① 打开命令提示符;
② 跳转到dumpbin所在的目录;
③ 使用如下命令查看动态链接库信息;
dumpbin /exports "目录\文件名.dll"
12. 直接导出的动态链接库中函数名称包含一些符号,用以描述函数相关输入输出类型。如果想要保证DLL中的函数名与代码中完全一致,可以添加.def文件,步骤如下:
① 添加一个新建项;
② 选中Visual C++ -> 代码 -> 模块定义文件
③ 编辑.def文件内容如下
LIBRARY
EXPORTS
say_hello @ 1
④ 重新生成解决方案,并再次使用dumpbin查看dll的内容,可以发现此时的函数名与代码保持一致。
⑤ 当使用.def文件标记需要导出的函数时,无需使用__declspec(dllexport)标记需要导出的函数。