windows程序设计的一些基础知识点(链接库)

WINDOWS环境——大多数典型的Windows程序产生的函数呼叫对应到的三个模块:

Kernel(日前由16位的KRNL386.EXE32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。

User(由16位的USER.EXE32位的USER32.DLL实作)指使用者接口,实作所有窗口运作机制。

GDI(由16位的GDI.EXE32位的GDI32.DLL实作)是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。

当执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。一个Windows.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。

当您连结Windows程序以产生一个可执行文件时,您必须连结程序开发环境提供的特定「引用链接库(import library)」。这些引用链接库包含了动态链接库名称和所有Windows函数呼叫的引用信息。连结程序使用该信息在.EXE文件中建立一个表格,在加载程序时,Windows使用它将呼叫转换为Windows函数。

目的码链接库——是带.LIB扩展名的文件。在使用连结程序进行静态连结时,它的程序代码就会加到程序的.EXE文件中。例如,在Microsoft Visual C++中,连同程序连结的一般C执行目的码链接库被称为LIBC.LIB。

 

引用链接库——是目的码链接库文件的一种特殊形式。像目的码链接库一样,引用链接库有.LIB扩展名,并且被连结器用来确定程序代码中的函数呼叫来源。但引用链接库不含程序代码,而是为连结程序提供信息,以便在.EXE文件中建立动态链接时要用到的复位位表。

 

动态链接——在程序执行时期,Windows把一个模块中的函数呼叫链接到动态链接库模块中的实际函数上的程序。

 

静态链接——在程序开发中,将各种目标模块(.obj)、执行时期链接库文件(.lib)以及经常是已编译的资源文件(.res)连接在一起,以便建立exe文件,此时的连接是静态链接。

 

尽管一个动态链接库模块可能有其它扩展名(如.EXE或.FON),但标准扩展名是.DLL。

只有带.DLL扩展名的动态链接库才能被Windows自动加载。如果文件有其它扩展名,则程序必须另外使用LoadLibrary或者LoadLibraryEx函数加载该模块。

 

目的码链接库和引用链接库只用在程序开发期间使用,而动态链接库在执行期间使用。

当一个使用动态链接库的程序执行时,该动态链接库必须在磁盘上。当Windows要执行一个使用了动态链接库的程序而需要加载该链接库时,动态链接库文件必须储存在含有该.EXE程序的目录下、目前的目录下、Windows系统目录下、Windows目录下,或者是在通过MS-DOS环境中的PATH可以存取到的目录下(Windows会按顺序搜索这些目录)。

 

动态链接库在大型应用程序中最有意义。

例如,假设要为Windows编写一个由几个不同的程序组成的大型财务软件包,就会发现这些应用程序会使用许多共同的例程。可以把这些公共例程放入一个一般性的目的码链接库(带.LIB扩展名)中,并在使用LINK静态连结时把它们加入各程序模块中。但这种方法是很浪费的,因为软件包中的每个程序都包含与公共例程相同的程序代码。而且,如果修改了链接库中的某个例程,就要重新连结使用此例程的所有程序。然而,如果把这些公共例程放到称为ACCOUNT.DLL的动态链接库中,就可解决这两个问题。只有动态链接库模块才包含所有程序都要用到的例程。这样能为储存文件节省磁盘空间,并且在同时执行多个应用程序时节省内存,而且,可以修改动态链接库模块而不用重新连结各个程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值