全部博文(626)
分类: WINDOWS
2013-09-29 10:27:34
动态链接库DLL
一、介绍
动态链接库DLL(Dynamic Link Library)是Windows的组成要素之一,是包含共享函数库的二进制文件,可以被多个应用程序同时使用。DLL也是包含了一系列类、函数、变量或其它资源的库文件。
一些常用的资源如图标、位图、字符串和对话框之类的资源,做到DLL中,可为多个应用程序共享。这就是纯资源DLL,也即只包含资源的DLL,其资源可以是字符串、数组、图标、位图、声音、视频或对话框等。
可用DLL实现程序的不同语言界面。
动态链接库DLL提供了一种共享数据和代码的方便途径。由于多个应用程序可共享同一DLL的函数,故使用DLL可节省磁盘空间和内存空间。也便于程序功能的扩展和升级。还便于多语言开发、模块化设计。
VC、C++ Builder、Delphi等都可以编写DLL文件。不同语言编写的程序可共享同一个DLL程序。
DLL不能单独运行,只能由可执行文件或其它DLL文件调用。
二、DLL的特性
1、DLL不是独立运行的程序,而是应用程序的一部分,只能由所属的程序调用。
2、如没有DLL说明文档,则难以调用DLL。因为DLL只包括函数的名字,不包括函数的参数和调用方法等信息。
使用VC的dumpbin(bin目录下)或Delphi的TDump,可查看DLL包括哪些函数,但不能看到具体信息。
三、调用DLL的方式
1、静态调用DLL
静态调用需要LIB库文件和DLL文件。程序编译时需用LIB文件,系统编译时DLL会编译进程序。应用程序发布时,不再需要LIB文件。
注:DLL的编写与编程语言无关,只需遵守DLL接口规范。
2、动态调用DLL
如没有与DLL相关联的LIB文件,则须使用动态调用。也必须知道函数返回值的类型和传递的参数个数、类型和顺序。
使用动态调用的应用程序在调用DLL中的导出函数前,必须使用loadlibrary()函数加载DLL,并得到一个模块句柄,然后使用该句柄调用getprocaddress()函数获得所需调用的导出函数的指针,通过该指针调用DLL中的导出函数。
使用动态调用DLL的应用程序不需要相应的LIB文件。
使用完毕后,还需要调用freelibrary()函数释放加载的DLL。
三、DLL问题
1、如何了解某应用程序使用哪些DLL文件
右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL文件的情况。
2、如何知道DLL文件被几个程序使用
运行Regedit,进入HKEY_LOCAL_MACHINESoftwareMicrosrftWindowsCurrentVersionSharedDlls子键查看,其右边窗口中就显示了所有DLL文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程序使用,(2)表示被两个程序使用,(0)则表示无程序使用,可将其删除。
3、如何解决DLL文件丢失的情况
有时在卸载文件时会提醒你删除某个DLL文件可能会影响其他应用程序的运行。所以当你卸载软件时,就有可能误删共享的DLL文件。一旦出现丢失DLL文件的情况,如果你能确定其名称,可以在Sysbckup(系统备份文件夹)中找到该DLL文件,将其复制到System文件夹中。如果不行,在电脑启动时又总是出现“***dll文件丢失……”的提示框,你可以在“开始/运行”中运行Msconfig,进入系统配置实用程序对话框以后,单击选择“System.ini”标签,找出提示丢失的DLL文件,使其不被选中,这样开机时就不会出现错误提示。