1、DLL:
DLL是Dynamic Link Library 的简称,它是一个包含可由多个程序同时使用的代码和数据的库,是不可执行文件,懂爱链接提供了一种方式,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。与动态链接库相对应,还有一种称之为静态链接库的函数库。
DLL文件一般具备以下三个文件:包含文件、导入库文件、实际代码文件,它们对应的扩展名分别是:.H、.LIB、.DLL。
使用DLL有两种方式:隐式链接和显示链接,由于隐式链接不能真正体现DLL的灵活性,隐式链接是在应用程序加载时就把DLL也加载如内存,在程序使用多个DLL的情况下,隐式链接特别占用系统资源,而显示链接在需要用到DLL时才把DLL加载如内存,不需要时则可以释放,节约系统资源,提高效。
显示链接(动态链接方式)方式使用DLL:首先,调用LoadLibrary函数加载DLL,其次,调用GetProcAddress得到和使用DLL中的函数首地址,最后,调用FreeLibrary函数卸载DLL。
优点:
DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。
使用DLL程序可以实现模块化,由相对独立的组件组成。
使用DLL可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
2、LIB
静态链接库就是把(lib)文件中用到的函数代码直接链接进目标程序,使用时不再需要其他的库文件。
动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
lib库有两种,一种是包含了函数所在DLL文件和文件中函数位置的信息,称为导出库;一种是包含函数代码本身,一般现有的DLL,用的是前一种库。
lib有静态lib和动态lib之分。
静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序
动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持
“通过#include包含这些函数声明的头文件后,我们的应用程序就可以使用lib文件中的函数”。