DLL文件简介
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。 此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。 Windows 操作系统中的一些作为 DLL 实现的文件 ·ActiveX 控件 (.ocx) 文件 ActiveX 控件的一个示例是日历控件,它使您可以从日历中选择日期。 ·控制面板 (.cpl) 文件 .cpl 文件的一个示例是位于控制面板中的项。每个项都是一个专用 DLL。 ·设备驱动程序 (.drv) 文件设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。
众所周知,Windows是一个消息驱动的32位操作系统。在Windows中,所有正在运行的进程都有一个独立的2GB的虚拟地址空间,进程之间相互不可见。Windows的绝大多数API与消息是不能跨越进程的。
“Hook”在Windows中主要是用来截取消息的,形象说,就是用来“钩“消息的。Hook实际上是一个处理消息的程序段,每当特定的消息发出,在没有到达目的窗口前,Hook函数就先捕获该消息,即Hook函数先得到消息处理的控制权。而且如果你把Hook实现在DLL文件中,那么Hook函数将会自动被系统映射到会处理那个特定消息的窗口所在的进程虚拟地址空间中。例如,你可以用Hook来捕获系统中所有的键盘输入消息(WM_KEYDOWN)来实现对电脑使用者的输入进行记录。
动态库与静态库的区别:
a、静态库中的代码会直接塞到EXE中,而动态库则可以被EXE动态的加载或卸载;
b、静态库中不能再包含其他的动态或静态库,而动态库则可以。