1、动态库dll概念
动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 “.drv”(旧式的系统驱动程序)。
2、使用VS生成dll文件
(1)vs 那么可以直接创建c++空项目,然后修改一下项目属性,然后在制作无疑是最好的方式。
(2)添加一个 预处理定义
注意:没有编译项目,可以会出现vs2017配置属性里面没有c/c++
大概是是VS的一个BUG,在VS2005、VS2008、VS2015(其他版本未测试,不知有没有)新建项目勾选空项目时会出现。
解决方法: 写一些代码之后再编译,C/C++就会在配置属性里出现了。(这大概就是不勾选空项目不会出现这种情况的原因了)
(3)创建DemoDll.c和DemoDll.h文件
DemoDll.c文件
1. #include "demo.h" 2. 3. int DemoDll_API add(int a, int b) 4. { 5. return a + b; 6. } 7.
DemoDll.h文件
1. #pragma once 2. 3. #pragma once 4. #ifdef DemoDll 5. #define DemoDll_API __declspec(dllexport) // 导出 6. #else 7. #define DemoDll_API __declspec(dllimport) // 导入 8. #endif // DemoDll 9. 10. /* 11. \ brief 12. __cplusplus c++宏 13. */ 14. #ifdef __cplusplus 15. extern "C" { 16. #endif // __cplusplus 17. 18. /* 19. \ brief 在这里编写 函数模块 20. */ 21. int DemoDll_API add(int a, int b); 22. 23. 24. #ifdef __cplusplus 25. } 26. #endif // __cplusplus 27.
(3)在VS中编译源文件,可以在DEBUG目录中看到生成的.dll文件和.lib文件
3、新建一个项目,使用dll文件
(1)将DemoDll.h、DemoDll.lib和DemoDll.dll拷贝到项目下
(2)将DemoDll.h和DemoDll.lib文件添加到项目中
接下来我们查看下 头文件,就可以理解之前编写动态库 添加预处理的宏的好处。
(3)
创建main.cpp进行测试(使用DemoDll.dll)
1. #include<iostream> 2. #include"demo.h" 3. 4. using namespace std; 5. 6. int main(int argc, char* argv[]) 7. { 8. cout << " 80 + 6 = " << add(80, 6) << endl; 9. }
可以看到运行结果
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建main.cpp进行测试(使用DemoDll.lib)
1. #include<iostream> 2. #include"demo.h" 3. 4. using namespace std; 5. 6. #pragma comment(lib, "DemoDll.lib") 7. 8. int main(int argc, char* argv[]) 9. { 10. cout << " 80 + 6 = " << add(80, 6) << endl; 11. }