2、动态库
在使用动态库的时候,往往提供两个文件:一个引入库(.lib)和一个DLL(.dll)文件。虽然引入库的后缀也是.lib ,但是动态库的引入库文件和静态库文件有着本质的区别,对一个DLL来说,其引入库文件(.lib)包含DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中。发布产品时,需要同时发布.exe和动态链接库。动态链接库的加载包含:隐式链接和显式加载
2.1隐式链接
2.1.1动态库的创建
A:File->New->Projects->Win32 Dynamic-Link Library(这里我建立的是dllTest1)
B:File->New->Files(dll.h)
dll.h
#ifdef DLL_API
#else
#define DLL_API extern "C" _declspec(dllimport) 表示该函数是从动态链接库中引入的
#endif
DLL_API int add(int a,int b);
C:File->New->Files(dll.cpp)
#define DLL_API extern "C" _declspec(dllexport) 表示该函数是动态链接库的导出函数
#include "dll.h"
int add(int a,int b)
{
return a+b;
}
D:编译,生成dllTest1.lib和dllTest1.dll文件
上面 extern "C" 表示我们希望动态链接库文件在编译时,导出函数的名称不要改变。注意双引号中的C一定大写。但是extern "C"不能用于导出一个类的成员函数,只能用于导出全局函数这种情况。
2.1.2动态库的隐式链接
我采用基于对话框的MFC应用程序进行测试,具体步骤不一一详解。只介绍下需要包含的文件。
将创建的动态库dll.h dllTest1.lib dllTest1.dll三个文件copy到测试程序文件夹内
A:在cpp文件中包含头文件#include"dll.h"
B:然后再Projects->Settings->Link->Objects/library modules下加入dllTest1.lib 完成
C:运行就OK