分类: C/C++
2015-11-05 16:33:51
DLL是一种不可执行的文件,它只有在被其他程序调用时才会发挥它的作用。DLL具有保护代码版权,实现模块化的功能, 它还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。
动态链接库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。
动态链接库DLL分为:MFC DLL 和非MFC DLL(即win32下的DLL)。而MFC DLL 又分为:规则DLL和扩展DLL.规则DLL分为:使用共享MFC DLL的规则DLL和带静态链接MFC的规则DLL。
DLL的调用又分为:显示调用与隐式调用。显示调用,需要如上所说,需要定义函数指针(若调用函数的话),LoadLibary加载DLL文件,GetProcAddress获得对应函数,freeLibary()。