理解库
库是一个文件, 它包含函数或者其它可以在应用程序中使用的资源.
这些资源一般是通用性的, 允许许多工作不同的应用程序能轻易的共享同呈代码或者资源.
静态链接库
是应用程序可执行文件的一部分, 不能与其它使用相同函数的其它应用程序共享.
通常用于相对小的稳定一些的函数库,比如说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