DLL是什么
2009-02-04 21:40:59| 分类: 资料 | 标签: |字号大中小 订阅
在Windows世界中,有着无数个活动的板块,它们都有一个共同的名字后缀――――.DLL(动态链接库)。现在就让我们走进这些神奇的活动板块,看看它们到底隐藏了什么秘密?
1. Windows操作系统的基石
随便打开一个系统目录,一眼望去就能看到很多扩展名为DLL的文件,这些就是本文说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。从Microsoft公司推出首个Windows版本以来,动态链接库(DLL)就一直是这个操作系统的基础。
2. 看看DLL里有什么
与其用晦涩的专业术语来解释DLL是什么,不如先来看看DLL里有什么。DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等),可是为什么要把代码放在DLL里面,而不是做成EXE呢?其实DLL中的代码是以API(应用程序介面)函数形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能。在使用“记事本”等程序时,如果要保存文件或打开文件,就会弹出通用文件对话框,选择文件位置。你可知道,这就是调用了系统底层DLL中的通用对话框界面。
3. 系统中几个重要的DLL
Windows中有3个非常重要的底层DLL:Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32.dll顾名思义就是内核相关的功能,主要包含用于管理内存、任务和线程的函数;而User32.dll中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;GDI32.dll的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。
4. 为什么要用DLL
刚才在谈到这个问题的时候,只解释了DLL将程序代码封装成函数的原理。为什么封装成函数,就能成为系统中大量使用DLL的理由呢?
①扩展应用程序
由于DLL能被应用程序动态地载入内存。所以,应用程序可以在需要时才将DLL载入到内存中,这让程序的可维护性变得很高。比如QQ的视频功能需要升级,那么负责编写QQ的程序员不必将QQ所有代码都重写,只需将视频功能相关的DLL文件重写即可。
②便于程序员合作
大家都知道编程工具有很多,比如VB、VC、Java、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢?这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。
③节省内存
如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。就好比一个办公室中,很少会为每一个员工配置一台饮水机的,而是在一个公共位置放上一个饮水机,所有需要喝水的职员都可以共用这台饮水机,降低了成本又节约了空间。
④共享程序资源
包括刚才提到过的通用文件对话框在内,DLL文件提供了应用程序间共享资源的可能。资源可以是程序对话框、字符串、图标,或者声音文件等。
⑤解决应用程序本地化问题
在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。
DLL是个大宝库,它把很多功能做成了一个个的模块,那么编程序时,只要合理的调用这些模块,就能实现程序所要做的事情,大大简化了程序设计的工作量, 这就是通常所说得系统程序的模块化结构,每个DLL就是构成Windows这座大厦的一砖一瓦。
分享到:
相关推荐
描述提到"这个玩意好难找,而且还要匹配系统,win10好像不怎么好用",这表明该DLL文件可能不是通用的,对于不同的Windows系统版本(尤其是Windows 10),可能需要特定的版本或者存在兼容性问题。在Windows 10上运行...
描述中提到的“安装这个小玩意就可以解决了”,这里的“小玩意”可能是指一个修复工具或者补丁,用于快速便捷地解决DLL文件丢失的问题。这种工具通常会包含缺失的DLL文件副本,通过自动注册或者复制到系统目录中来...
// 判断异常记录的内容是否是断点异常(断点异常里面包括int3异常) if (EXCEPTION_BREAKPOINT == per->ExceptionCode) { // 判断断点地址是否为WriteFile()API地址 if (g_pfWriteFile == per->...
描述中的“安装这个小玩意就可以解决”暗示了解决方法是通过安装对应的更新或修复工具。提供的压缩包文件 `vc_redist.x64.exe` 正是微软Visual C++运行时库的 redistributable 包,用于解决缺失的DLL问题。这个包...
1. opc_aeps.dll 和 opchda_ps.dll:这两个文件可能分别对应OPC的AE(Alarm & Event)和HDA(Historical Data Access)服务提供商的动态链接库。它们提供了与这些OPC服务交互的接口。 2. OpcRcw.Da.dll:这是一个...
提示api-ms-win-crt-runtime-l1-1-0.dll 丢失, 安装这个小玩意就可以解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题
但是,为啥不管哪里下载的glut静态库都是把自己链接到glut32.dll动态库上? 哇,我真的搞不懂,我要静态库是因为什么原因?不就是想把库和exe链接到一起吗?那你干嘛把他当成一个dll的傀儡? = = 服了 找遍百度,...
PsSetCreateProcessNotifyRoutine CmRegisterCallback这几个,至于那个什么shutdown回调不知道是啥玩意,就没搞了,有知道的顺便告诉我下撒,谢谢 九:文件系统fat和ntfs的分发函数检测 直接反汇编fat和ntfs的...
今天晚上在看雪上找到了一个数字签名过的WinIO驱动,然后写了这个玩意。可以直接读写硬件端口哦。 尼!玛! 先发帖,然后我测试下 控制8259A可编程中断控制器 让电脑瞬间卡死。 话说这个东西好玩的地方比较多,...
本人以人格担保不会在其中添加rootkit,木马,病毒一类的无聊玩意!!!请放心运行。 请首先检查unlocker.zip文件的MD5值 : B35968822E46BC8AEE5AD4A7C859DECB 无误后可以解压运行unlocker软件。 2个OCX文件是VB6的...
感觉这玩意儿有点土。应该有更成熟的方法。 SoHook.dll 被 SoExcelTeam.dll 调用到的动态库,检测EXCEL中鼠标的滚动动作。VC6.0开发。 ============================== ExcellentCompare.exe 的编译 ========...
这玩意应该听说过吧。还是很强的 内附二个DLL,已解除未注册字样。 已实际测试过