了解dll

学习教程

DLL:Dynamic Link Library,即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。

它是microsoft在windows操作系统中实现共享函数库概念的一种实现方式。其中windows中 一些作为DLL实现的文件有:

由来

DLL最初用于节约应用程序所需要的磁盘和内存空间。早前,在传统的非共享库中,一部分代码简单地附加到调用的程序中。如果两个程序同时调用同一个子程序,就会出现两份那段代码。相反,许多应用共享的代码能够切分到一个DLL中,在硬盘上存为一个文档,在内存中只需使用一个实例。

为什么要用DLL 刚才在谈到这个问题的时候,只解释了DLL将程序代码封装成函数的原理。为什么封装成函数,就能成为系统中大量使用DLL的理由呢? ①扩展应用程序 由于DLL能被应用程序动态载入内存。所以,应用程序可以在需要时才将DLL载入到内存中,这让程序的可维护性变得很高。比如QQ的视频功能需要升级,那么负责编写QQ的程序员不必将QQ所有代码都重写,只需将视频功能相关的DLL文件重写即可。 ②便于程序员合作 这个和最终用户关系不大,仅供了解。大家都知道编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢?这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。 ③节省内存 如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。就好比一个办公室中,很少会为每一个员工配置一台饮水机的,而是在一个公共位置放上一个饮水机,所有需要喝水的职员都可以共用这台饮水机,降低了成本又节约了空间。 ④共享程序资源 包括刚才提到过的通用文件对话框在内,DLL文件提供了应用程序间共享资源的可能。资源可以是程序对话框、字符串、图标,或者声音文件等。 ⑤解决应用程序本地化问题 在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。

win32 文档

win32课程学习

win32 api

主要存放在 c:\windows\system32下面所有的dll

几个重要的dll

  1. kernel32.dll ,管理内存,进程线程相关
  2. user32.dll ,创建窗口,发送消息,用户界面程序接口
  3. gdi32.dll , graphical device interface ,图形设备接口

image-20220405143349220

windows 进程运行过程

句柄表原理

https://www.bilibili.com/video/BV1yY411x7m3?p=7