DLL概述
DLL是Dynamic Link Library的缩写,即动态链接库。一般来讲DLL是一种磁盘文件,以.dll结尾的文件,但以.drv,.SYS,甚至.exe为扩展名的文件也可以是DLL。DLL由全局数据、服务函数和资源组成,在运行时被系统将DLL文件映像映射到调用进程的虚拟地址空间中成为调用进程的一部分。DLL模块通过导出函数,导出类、导出变量来为外界提供服务,不过由于导出变量会破坏封装,因此一般不建议导出变量。
DLL调用方式
DLL调用分为静态调用(又叫隐式调用)和动态调用(又叫显示调用)两种方式。
- 静态调用时,需要将与动态链接库对应的.lib文件加入到工程中,在VS中将lib所在目录设置到项目->属性->链接器->常规->附加的库目录,将lib添加到到项目->属性->链接器->输入->附加的依赖项中。在QT Creator中在pro文件中添加 LIBS += -Llib库所在目录 -llib。或者在程序中添加#pragma comment(lib, “lib”)来引入动态链接库。
- 动态调用时,由编程者调用API函数来加载和卸载DLL。在VS中使用如下方式:
typedef int (*Foo)(int, int);
HINSTANCE hinstLib = LoadLibrary("Math.dll");
Foo add = (Foo) GetProcAddress(hinstLib, "add");
int nSum = add(1, 2);
FreeLibrary(hinstLib);
在Qt中使用如下方式: