动态链接库-原理

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

理解库

库是一个文件, 它包含函数或者其它可以在应用程序中使用的资源.

这些资源一般是通用性的, 允许许多工作不同的应用程序能轻易的共享同呈代码或者资源.

静态链接库

是应用程序可执行文件的一部分, 不能与其它使用相同函数的其它应用程序共享.

通常用于相对小的稳定一些的函数库,比如说C标准库,因为它容易创建和维护.

它是在编译和链接时加到可执行文件中的.

动态链接库

是可执行文件,它包含函数,数据或资源等其他应用程序可用到的东西.

它可以在需要的时候随时装入, 在装入时或运行时.

当某应用程序需要一个已装入的DLL:

1. 把该DLL映射到新进程的地址空间.

2. 让WINDOWS 2000 为DLL所留的引用计数器加1.

注意: DLL的路径是它身分的一部分.

DLL的利弊

好处: 减少可执行代码大小,重用代码,大工程可分为易管理的小工程,实现新功能更容易

缺点: 处理多个文件,增加工程的复杂性,用户要处理DLL的版本问题

初始化DLL

入口点函数被调用的时机:

进程第一次调用该DLL时

与DLL相联的进程创建新进程时

与DLL相联的进程的某个线程摧毁时

进程释放DLL时

导入与导出DLL函数与数据

所有的函数,数据和资源都必须显示地从DLL中导出:

在库的.DEF文件的EXPORT部分中,填写导出项目的名称

使用工具相关的方法,如VC中的__declspec(dllexport)关键字

DEF: 在16位WINDOWS开发中比较重要,在32位下不那么重要

对于32位DLL,它至少包含LIBRARY 和 EXPORTS两项

导出DEF文件中的符号:

如用户希望使用DEF的EXPORT部分:

可以把DLL作为C工和编译以关闭name mangling

或通过MAP中的信息填写EXPORTS

在装入期间装入DLL

隐式装入: 开始执行EXE时,WINOWS2000 负责找到应用程序所需要的DLL,

并对每一次DLL调用负责地址解析.

链接时需要导入库

运行时装入DLL

LoadLibrary(), GetProcAddress(), FreeLibrary()

DLL版本控制

创建DLL共享内存

使用DEF中的SECTIONS关键字,用户可以把DLL使用的内存区定义为共享的.

把共享内存置于区中(通过编译指示),并初始化

使用MFC和DLL

动态链接常规DLL

DLL与MFC DLL动态链接

静态链接常规DLL

DLL与MFC DLL静态链接

扩展DLL(最常用)

DLL扩展了MFC库

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航