dll是动态链接库文件,是windows系统中实现模块动态加载必不可缺的,这里以vs2015建立dll为例,先做介绍:
首先在vs新建项目-win32-dll,选导出符号(可以自动导出dll中的一些函数或者类型),预编译头(自动加入预编译指令)
我们这里是创建了一个simpledll的工程,创建后,在头文件添加如下:
这里,#ifdef SIMPLEDLL_EXPORTS
#define SIMPLEDLL_API __declspec(dllexport)
#else
#define SIMPLEDLL_API __declspec(dllimport)
#endif
SIMPLEDLL_EXPORTS就是预编译指令,表示是dll导出的接口,在该工程属性-预处理器里定义的有。所以,对DLL来说,就是定义的#define SIMPLEDLL_API __declspec(dllexport)表示是导出,而如在使用dll的工程里,没有SIMPLEDLL_EXPORTS这个预编译指令,所以定义的就是#define SIMPLEDLL_API __declspec(dllimport)表示是导入。
在这个dll里,有导出一个类对象
class SIMPLEDLL_API Csimpledll {
public:
Csimpledll(void);
// TODO: 在此添加您的方法。
void SetNum(int n);
int GetNum();
private:
int m_num;
};
还有导出的全局变量,函数接口
extern SIMPLEDLL_API int nsimpledll;//这是一个全局变量
SIMPLEDLL_API int fnsimpledll(void);//这是一个函数接口
extern SIMPLEDLL_API int add(int a, int b, Csimpledll & c);//这也是导出的函数,中间参数有导出的类对象变量
然后就是对这个头文件的每个变量或者函数进行定义,代码比较简单:
然后f7编译运行,就生成了.dll和.lib文件,
紧接着,再创建一个调用dll的win32命令行工程testsimpledll,把上边生成的lib和.h头文件拷贝到工程的目录下
而dll文件则放到工程的生成文件目录,就是和exe文件放到一起:
在命令行程序工程里,把dll的头文件添加进去,添加如下代码:
#include "simpledll.h"
#pragma comment(lib,"simpledll.lib")//这个就是导入dll的lib库文件,或者在工程属性-链接器里添加也行。
然后在.cpp中编写几个测试代码:
最后执行结果如下: