Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4031648
  • 博文数量: 626
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 11080
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-23 13:08
文章分类

全部博文(626)

文章存档

2015年(72)

2014年(48)

2013年(506)

分类: 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文件,使其不被选中,这样开机时就不会出现错误提示。

阅读(1039) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~