1. 启动VS2017,点击菜单栏上的“文件->新建->项目”创建一个新的开发项目;
  2. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++

  3. 在弹出的“新建项目窗口”中,选择左侧“Visual C++”列表下的“Windows桌面”,然后选择右侧的项目类型为“动态链接库(DLL)”,接着设置项目名称和存储位置以及解决方案名称。配置完毕后,点击“确定按钮”确定创建动态链接库项目;
  4. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_02

  5. 该步骤之后,文件夹中生成DLL1文件夹,包含如下内容
  6. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_03

  7. 项目创建之后,点击VS2017界面菜单栏上的“生成 > 生成解决方案”编译新创建的项目代码,确认是否存在问题(极少会出现问题);
  8. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_04

  9. 生成解决方案后,会在Debug文件夹中生成如下文件
  10. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_05

  11. 编译结束之后,可以在VS2017的输出窗口中见到编译成功的输出信息;
  12. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_06

  13. 在VS2017开发界面中,右键单击“解决方案”里面“Dll1”项目下的“头文件”目录,在弹出菜单中选择“添加 > 新建项”;
  14. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_07

  15. 在弹出的“添加新项”对话框中,选择“头文件(.h)”,然后输入头文件的名称“dll1.h”,之后点击“添加按钮”确定添加一个名为“dll1.h”的头文件;
  16. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_08

  17. 相应文件中多处dll1.h头文件
  18. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_09

  19. 在Windows中,定义在dll中的变量、函数和类,如果希望让别的程序能够访问。必须通过manifest文件指定导出目标(变量、函数或类)或者通过_declspec(dllimport)关键字指定需要导出的目标,然后在使用dll的程序中通过_declspec(dllimport)关键字指定导入的目标。在开发中使用_declspec()定义导出/导入目标是最方便的做法,因此,可以继续向“dll1项目”中添加一个头文件 “export.h”,然后添加自适应导出/导入目标的宏;(图中第一个应该为_declspec(dllimport)第二个为_declspec(dllexport),存在图中错误)
  20. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_10

  21. 文件中反应出来的是,在如下目录下生成export.h文件
  22. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_11

  23. 鼠标选中DLL1项目右键“ 属性”,打开Dll1项目的属性页窗口;
  24. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_属性页_12

  25. 在弹出的“Dll1属性页窗口”中,将配置设置为”所有配置”,然后选中“C/C++ > 预处理器”,接着在“预处理器定义”右侧的属性值中增加“EXPORT_DLL”。设置完毕后,点击“确定按钮”确定属性设置;
  26. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_13

  27. 在属性页中定义了EXPORT_DLL宏之后,export.h文件中EXPORT_API宏对应的值就变成了__declspec(dllexport),对于Dll1项目而言,只要使用EXPORT_API修饰的对象,都将变成导出目标。相对而言,在引用Dll1的另一项目中,默认是没有定义EXPORT_DLL宏的,那么用EXPORT_API修饰的对象,则都是导入目标;
  28. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_14

  29. 打开 “dll1.h”文件,使用#include包含“export.h”头文件,然后使用EXPORT_API声明一个名为printHello()的DLL导出函数;
  30. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_15

  31. 打开“Dll1.cpp”,包含“stdio.h”头文件并写入printHello()函数的实现;
  32. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_16

  33. 生成解决方案(F7),可以在输出窗口中见到所有代码均编译成功;
  34. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_17

  35. 相应的在Debug文件夹下,多处如下几个文件
  36. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_18

  37. 右键单击左侧列表中“解决方案”,然后在弹出菜单中选择“添加 > 新建项目”,向解决方案中添加一个新的控制台项目,用于测试Dll1中导出的printHello()函数是否可以正常访问;
  38. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_19

  39. 在弹出的“添加新项目窗口”中,选择“Windows桌面 > Windows控制台应用程序”,然后输入新项目的名称并点击“确定按钮”创建新项目;
  40. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_20

  41. 相应文件中表现如下
  42. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_21

  43. 包含文件如下
  44. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_22

  45. 右键单击“解决方案”列表中新创建的控制台项目,在弹出菜单中选择“设置为启动项目”,将控制台项目设置为启动项目。这样,每当运行程序时,启动的就是这个新创建的控制台项目(DLL项目是无法独立运行的);
  46. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_23

  47. 点击VS2017界面中的“本地Windows调试器”按钮,编译并运行控制台项目,会发现有一个黑屏幕一闪而过。这是由于控制台程序在执行完main()函数后,直接退出了(DevCPP中则会自动暂停,防止控制台直接退出)。
  48. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_24

  49. 文件中反应如下
  50. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_25

  51. 为了让控制台程序执行完毕后依然保持开启状态,可以打开 ConsoleApplication1.cpp文件,然后包含stdlib.h文件并在main()函数体的return语句之上添加程序暂停语句”system(“pause”);”
  52. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_属性页_26

  53. 写好代码之后,再次调试运行程序,可以见到控制出现并暂停。在控制台窗口中,点任意键可以退出控制台程序;
  54. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_属性页_27

  55. 回到VS2017开发界面,右键单击“解决方案管理器”列表中的控制台项目,在弹出菜单中选择“生成依赖项 > 项目依赖项”打开“项目依赖项窗口”;
  56. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_属性页_28

  57. 在弹出的“项目依赖项窗口”中,勾选依赖于“Dll1”,表示控制台项目ConsoleApplication1依赖Dll1项目。这样可以保证每次编译ConsoleApplication1时,编译器总会自动先编译Dll1项目,保证Dll1总是最新的。设置完毕后,点击“确定按钮”关闭“项目依赖项窗口”;
  58. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_29

  59. 右键单击VS2017工作区中的“Dll1.cpp选项卡页”,在弹出菜单中选择“打开所在的文件夹”;
  60. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_30

  61. 在打开的Dll1.cpp文件所在的文件夹中,点击返回按钮,重新进入到Dll1项目的Debug输出目录中。在该目录中可以见到Dll1项目生成的符号链接库“Dll1.lib”和动态链接库“Dll1.dll”。 如果需要在另一个项目中加载“Dll1.dll”文件,那么通过链接“Dll1.lib”是最简便的方式(否则就要通过LoadLibrary()及相关函数通过代码加载动态库了);
  62. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_31

  63. 返回VS2017开发界面中,右键单击“解决方案列表”中的ConsoleApplication1,在弹出菜单中,选择“属性页”,打开控制台项目的属性页;
  64. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_32

  65. 在弹出的ConsoleApplication1属性页窗口中,将配置设置为“所有配置”,然后在左侧“配置属性”列表中,选择“链接器 > 常规”,接着在右侧属性列表中选择“附加库目录”属性右方的编辑框,在弹出的下拉列表中选择“编辑”;
  66. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_C++_33

  67. 在弹出的“附加库目录窗口“中,点击”宏(M) >>“按钮,展开VS2017的宏列表;
  68. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_34

  69. 在展开的VS2017宏列表中,搜索“(Out”即可看到列表中显示宏“(Out”即可看到列表中显示宏“(OutDir)”表示解决方案Dll1的输出目录。由于ConsoleApplication1和Dll1项目均位于解决方案Dll1下,因此在默认配置下,这两个项目的输出文件均位于该输出目录下。只要将$(OutDir)充当静态库的查找目录,就可以方便的找到“Dll1.lib”。记住这个宏名称后,点击“宏(M) <<”按钮隐藏宏列表页;
  70. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_属性页_35

  71. 返回“附加库目录窗口”中,点击“新建文件夹图标”,然后在新出现的附加目录项中填入“$(OutDir)”并点击”确定按钮”结束附加库设置;
  72. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_36

  73. 附加库设置完毕后,可以在项目属性页中见到“附加库目录”属性右方已经被填入了设置的值;
  74. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_37

  75. 选择“ConsoleApplication1属性页”左侧列表中的“输入”,然后在右侧“附加依赖项”中填入“dll1.lib;”,告诉编译器需要链接dll1.lib,进而加载我们需要的“Dll1.dll”。设置之后,点击“确定按钮”关闭属性页;
  76. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_38

  77. 在VS2017工作区中,打开“ConsoleApplication1.cpp”文件,然后在代码中包含“dll1.h”(注意这里的相对路径,目录起点为ConsoleApplication1.cpp所在的目录),之后在main()函数中添加调用printHello()函数的代码;
  78. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_39

  79. 生成解决方案(或F7),一切正常时,可以在VS2017输出窗口中见到编译成功的输出信息。如果出错,则根据提示修改项目配置或代码后重新生成解决方案,直到成功为止;
  80. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_VS2017_40

  81. 相应文件更新为
  82. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_41

  83. 运行ConsoleApplication1程序,在弹出的控制台界面中可以见到输出的“Hello”字符串,表示Dll开发成功。Enjoy!
  84. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_解决方案_42


  85. C++ -- 使用VS2017创建DLL并链接至其他项目中【转】_DLL_43