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文件
#include "demo.h"
int DemoDll_API add(int a, int b)
{
return a + b;
}
DemoDll.h文件
#pragma once
#pragma once
#ifdef DemoDll
#define DemoDll_API __declspec(dllexport) // 导出
#else
#define DemoDll_API __declspec(dllimport) // 导入
#endif // DemoDll
/*
\ brief
__cplusplus c++宏
*/
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/*
\ brief 在这里编写 函数模块
*/
int DemoDll_API add(int a, int b);
#ifdef __cplusplus
}
#endif // __cplusplus
(3)在VS中编译源文件,可以在DEBUG目录中看到生成的.dll文件和.lib文件
3、新建一个项目,使用dll文件
(1)将DemoDll.h、DemoDll.lib和DemoDll.dll拷贝到项目下
(2)将DemoDll.h和DemoDll.lib文件添加到项目中
接下来我们查看下 头文件,就可以理解之前编写动态库 添加预处理的宏的好处。
(3)
创建main.cpp进行测试(使用DemoDll.dll)
#include<iostream>
#include"demo.h"
using namespace std;
int main(int argc, char* argv[])
{
cout << " 80 + 6 = " << add(80, 6) << endl;
}
可以看到运行结果
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建main.cpp进行测试(使用DemoDll.lib)
#include<iostream>
#include"demo.h"
using namespace std;
#pragma comment(lib, "DemoDll.lib")
int main(int argc, char* argv[])
{
cout << " 80 + 6 = " << add(80, 6) << endl;
}