动态链接库-原理

类别:VC语言 点击:0 评论:0 推荐:

理解库

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

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

 

静态链接库

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

通常用于相对小的稳定一些的函数库,比如说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库

 

本文地址:http://com.8s8s.com/it/it687.htm