[VS2017使用] 创建动态链接库(DLL)[TZZ]
1、启动Visual Studio 2017软件,在弹出的“Visual Studio 2017主窗口”中,点击菜单栏上的“文件->新建->项目”(或使用快捷键Ctrl + Shift + N)创建一个新的开发项目;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/890dfb4a2f27e7effab624b519dd3340b7f3f504.jpg)
3、项目创建之后,点击VS2017界面菜单栏上的“生成 > 生成解决方案”编译新创建的项目代码,确认是否存在问题(极少会出现问题);
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/90c61d1c99c0affc3a366b9b2372941fbfe4ea04.jpg)
5、在VS2017开发界面中,右键单击“解决方案”里面“Dll1”项目下的“头文件”目录,在弹出菜单中选择“添加 > 新建项”;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/4b626771fe1d96d8fea92e942ccd0c6efaf2e104.jpg)
7、在Windows中,定义在dll中的变量、函数和类,如果希望让别的程序能够访问。必虔銎哂埽须通过manifest文件指定导出目标(变量、函数或类)或者通过__declspec(dllexport)关键字指定需要导出的目标,然后在使用dll的程序中通过__declspec(dllimport)关键字指定导入的目标。在开发中使用__declspec()定义导出/导入目标是最方便的做法,因此,可以继续向“dll1项目”中添加一个头文件 “export.h”,然后添加自适应导出/导入目标的宏;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/7496877bbbf4da58826a91fdea0f8b56ac04d704.jpg)
9、在弹出的“Dll1属性页窗口”中,将配置设置为”所有配置”,然后选中“C/C++ > 预处理器”,接着在“预处理器定义”右侧的属性值中增加“EXPORT_DLL”。设置完毕后,点击“确定按钮”确定属性设置;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/16a84fe10ef858562f8de79053e9ccd2ba66cd04.jpg)
11、打开 “dll1.h”文件,使用#include包含“export.h”头文件,然后使用EXPORT_API声明一个名为printHello()的DLL导出函数;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/ed792abb19efa25f00a58dcf59828689a0463b05.jpg)
13、生成解决方案(F7),可以在输出窗口中见到所有代码均编译成功;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/7c84d1672b5fd5462427f7a07fd0b503c9d22405.jpg)
15、在弹出的“添加新项目窗口”中,选择“Windows桌面 > Windows控制台应用程序”,然后输入新项目的名称并点击“确定按钮”创建新项目;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/a99a494afa32939c1e4690065719ce2c5a1b1505.jpg)
17、点击VS2017界面中的“本地Windows调试器”按钮,编译并运行控制台项目,会发现有一个黑屏幕一闪而过。这是由于控制台程序在执行完main()函数后,直接退出了(DevCPP中则会自动暂停,防止控制台直接退出)。
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/edd84743040148fe5df312df8fd149299b880205.jpg)
19、写好代码之后,再次调试运行程序,可以见到控制出现并暂停。在控制台窗口中,点任意键可以退出控制台程序;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/46315818dfdae43b6a374d95c457935652bb7405.jpg)
21、在弹出的“项目依赖项窗口”中,勾选依赖于“Dll1”,表示控制台项目Console钽吟篑瑜Application1依赖Dll1项目。这样可以诺蝈胂叟保证每次编译ConsoleApplication1时,编译器总会自动先编译Dll1项目,保证Dll1总是最新的。设置完毕后,点击“确定按钮”关闭“项目依赖项窗口”;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/65ba880b312105615f121a5d08aee8d7582a6a05.jpg)
23、在打开的Dll1.cpp文件所在的文件夹中,点击返回按钮,重新进入到Dll1项目的Debug输出目录中。在该目录中可以见到Dll1项目生成的符号链接库“Dll1.lib”和动态链接库“Dll1.dll”。 如果需要在另一个项目中加载“Dll1.dll”文件,那么通过链接“Dll1.lib”是最简便的方式(否则就要通过LoadLibrary()及相关函数通过代码加载动态库了);
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/031231632385e0368920085cb8e039723c035a05.jpg)
25、在弹出的ConsoleApplication1属性页窗口中,将配置设置为“所有配置”,然后在左侧“配置属性”列表中,选择“链接器 > 常规”,接着在右侧属性列表中选择“附加库目录”属性右方的编辑框,在弹出的下拉列表中选择“编辑”;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/05aae8a75f0f822b0e5f5386c018512c8df14d05.jpg)
27、在展开的VS2017宏列表中,搜索“$(Out”即可看到列表中显示宏“$(OutD坡纠课柩ir)”表示解决方案Dll1的输出蚕蝣鲢蹙目录。由于ConsoleApplication1和Dll1项目均位于解决方案Dll1下,因此在默认配置下,这两个项目的输出文件均位于该输出目录下。只要将$(OutDir)充当静态库的查找目录,就可以方便的找到“Dll1.lib”。记住这个宏名称后,点击“宏(M) <<”按钮隐藏宏列表页;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/874f6275e5f4fcf564bc757a21d7726b0de2bd05.jpg)
29、附加库设置完毕后,可以在项目属性页中见到“附加库目录”属性右方已经被填入了设置的值;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/e09173e89a618625da22815c3b04541bd00faa05.jpg)
31、在VS2017工作区中,打开“ConsoleApplication1.cpp”文件,然后在代码中包含“dll1.h”(注意唁昼囫缍这里的相对路径,目录起点为ConsoleApplication1.cpp所在的目录),之后在main()函数中添加调用printHello()函数的代码;
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/ad121888912ca5ca6d59dffc8bfc77f7990e9405.jpg)
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/274e9635dd8a59de84b6c7b5b370d5413b8c8405.jpg)
![[VS2017使用] 创建动态链接库(DLL)[TZZ]](https://exp-picture.cdn.bcebos.com/9a8fd9f88a775ddd46fdaafea427e7ef2906f905.jpg)