动态链接库-原理

本文介绍了Windows系统下库的相关知识,包括静态链接库和动态链接库。静态链接库是可执行文件一部分,动态链接库可按需装入。还阐述了DLL的利弊、初始化、导入导出、装入方式、版本控制、共享内存创建等内容,最后提及了使用MFC和DLL的几种方式。

理解库

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

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

 

静态链接库

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

通常用于相对小的稳定一些的函数库,比如说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: 16WINDOWS开发中比较重要,32位下不那么重要

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

导出DEF文件中的符号:

              如用户希望使用DEFEXPORT部分:

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

或通过MAP中的信息填写EXPORTS

 

在装入期间装入DLL

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

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

链接时需要导入库

 

运行时装入DLL

LoadLibrary(), GetProcAddress(), FreeLibrary()

 

DLL版本控制

 

创建DLL共享内存

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

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

 

使用MFCDLL

动态链接常规DLL

DLLMFC DLL动态链接

静态链接常规DLL

DLLMFC DLL静态链接

扩展DLL(最常用)

DLL扩展了MFC

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值