- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC
DLLs的开发和使用
吴玉军曩文渡
(无■轻工大学信息与控翻工群院无■2l●∞回
■蔓·车立帆动鑫睦麓库的基车鼍毒、Yin32仉L和-inl6
DLL的差鼻.,I出了lFc中三种动杏t撞摩糖‘吐蠢鲁白琦t的t
鼻和适用的场台.蘸詹一建丁阻L的两种调用方法.量髓出了一十-Fc阻L
B暖■c应用衽序宴现—甩—错子.
DLL.
蓑t词l动寿甓接率(gLL},-K
1.动态链接庠的基本概念.
程序代码的共事和较高的执行效率,一直悬蝙程人员所追求的目标.代码麸事的形式报
多,鼍靠的形式是以库的形式出现.所谓库,就是由一个或多个目标代码模块经过组织而形
成的一个共享代码群.通过一个称为链接的步纛,窿用程序和库代码阃建立。链”,j砒链
接实现对库中函数和资源的调用。
应用程序和库链接的方法有两种:一种是静态链接.所谓静态链接,就是应用程序在需
要调用库代码时,在自己的可执行文件中产生一个库的挎皿.所li上一且t立链攮.蠢和愿库
代码无关.应用程序可以单独发行、运行。由于应用程序在运行过程中。无叠链接的开悄。
所以运行效奉较高,却是以牺牲存储空问为代价的.
另一种就是动态链按.与静态链接库相比,动态链接更是活域实瑰了代码共事.系统中
始终只保存库的一个拷贝,通过和各个应甩程序之间t立的。键’.雨t多个应用程序共
事.提高了代码的共事性.同时.应用程序和库之间的t接最一种较松t的关曩.便于t立
和拆除链接,体现了程序的模块化结构.
2.W妞16与Wtn弛m正韵麓再.
在内存地址分配上的差异t在Winl6中,内存地址是按堆的形式全局分配鹩,每个进程拥有
多个不同类型的堆.每一个DLL揶有自己的散据段.试数据段巾包含了脚工所膏的全一静
态和全局变量,以及DLL的私有局部堆.当DLL为它们分配地址空闻时..最从DLL的敦
据段中分配.由于任何应用进程调用Ⅸ上时。DLL中的函数总可以访问自己的一部堆.直
用程序可以报方便地实现多个进程闯的数据共事.
Wir口2以进程单位分配内存地址.每个进程最大具有4∞的虐拟地址空阃.每个进程
具有运行所需的所有代码和数据的映射。进程之问联篆铰少.熏统安全性好.在w-口2环境
中,应用进程必须首先将DLL映射到进程地址空问中。然后才●E实现对DU.的调用.DU。
没有了自已盼局aⅨ堆.同时DLL的全局变量和静态变量在各个应用避程的多个映射之闯不
能共事.所以数据共享涉及到越过进程边界.必须由专门的穗序实现。
W∞2与Winl6 ·
m山的差异还表现为I
● 没有w谳6
DLL中独立的起动模块.与DLL相联的C船H近行—程謦一接处曩Ⅸ工
的起动鞭序.
●通过调用适当的构造函敷,运行库曩程枣对所有非奉地c++尊杏对曩进行毒,始化.
● 用户定义的单一函敷DILMam来处理其它的初始化和终止.
●使用叫a印a吐、棚j脚啤t■性,在露程序中直接■入、■出符号.
一419—
3.、℃}卜s.o提供的三种MFCDLL的各自特点.
程序运行效率这两个指标上,它们具有各自的特点:
DLL
●蕾峋譬矗密MFC肟Regular
静态链接MFC的&,则面DLL在DLL内部可以使用MFc类.DLL的输出函数可以被
MFC和非MFC应甩程序调用。它具有以下特点:
1)DLL与静态链接的应用程序共享同一个版本的MFC静态链接类库,不需要独立与
DLL相链的MFC类库,
在静态链接MFC的DLL中,至少具有以下实现:
1).利用ⅫFc向导提供的DIIMaLn函数,加入DLL所需的初始化和终止代码.
2).尽管USRDLL。已经不用,再蝙译命令行还必须定义“USRDLL”宏。这个宏确保所
需的MFC类库文件注入到DLL工程中.
静态链接MFC的R螂kDLL不具鲁的实现l ,
2)应用和DLL之闻不能传递ⅫFc对象指
原创力文档


文档评论(0)