- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章C动态链接库的使用
第11章 动态链接库的使用 本章要点: 动态链接库简介。 动态链接库的设计开发。 动态链接库的使用。 11.1 动态链接库基础知识 动态链接库(Dynamic-Link Library),简称DLL,它是基于Windows程序设计的一个非常重要的组成部分。在建立应用程序的可执行文件时,无需将DLL链接到程序中,而是在运行时动态装载DLL,装载时DLL被映射到进程的地址空间中。MFC AppWizard支持自动生成几种类型的DLL,使用它可以编写自己的DLL。 11.1.1 静态链接和动态链接 用C语言进行程序设计的程序员都用过C语言的标准库函数,如printf()输出函数等,这些函数的定义存放在函数库中,在程序设计中可以直接调用。源程序编辑完成后,先要进行编译生成以.obj为后缀的目标程序,然后连接程序把库函数与目标程序连接在一起生成以.exe为后缀的可执行文件。 这种链接存在的问题:如果程序多次调用相同的库函数,则连接程序会多次把库函数连接到目标程序中,最终导致生成的可执行文件过长,浪费了宝贵的内存空间,这种链接叫静态链接。 11.1.1 静态链接和动态链接 Windows程序设计采用了动态链接的方法,所谓动态链接是指应用程序在执行过程中动态调用库函数,而且无论调用该函数多少次,在内存中只有该函数的一个拷贝,显然这极大地节省了内存空间。 DLL是一种基于Windows的程序模块,可以认为就是一个函数包;它不仅可以包含可执行代码,还能包含数据和各种资源,这扩大了库文件的使用范围。 11.1.2 MFC中的DLL MFC类库本身是用DLL形式实现的共享库。在新建一个工程时,可以选择使用静态库还是动态共享的DLL库。其中,动态共享库就是Visual C++ 6.0安装在系统目录和其他目录下的一些DLL,例如安装在系统System或System32目录下的MFC42.dll文件。 11.2 动态链接库的设计 11.2.1 DLL的接口函数 DLL程序自身并不能运行,它需要一个入/出口函数,在应用程序使用DLL中的内容时,系统调用入/出口函数完成DLL的初始化和关闭工作。 一个DLL可以有一个入/出口函数,系统在某些时候会调用这个DLL入/出口函数。通常是完成针对应用程序的初始化和结束处理。如果建立的是只有资源的DLL或不需要这种处理的DLL,就不必实现此函数。Visual C++已经定义了简单的DllMain()函数作为DLL入/出口点函数,它完成了一些初始化工作,包括对C运行时刻库调用的支持等,所以如果DLL程序中没有这样的函数,链接器会自动将这个默认的DllMain链接上。 11.2.1 DLL的接口函数 一般DLL的入/出口是DllMain()函数,但在MFC AppWizard自动生成的两种Regular DLL中则是另外一种形式,下面分别进行介绍。 1. DllMain函数。DllMain函数在系统调入或卸载这个DLL时调用,这些动作一般发生在应用程序使用LoadLibrary()和FreeLibrary()等函数以及进程线程启动和终止的时候。 2. MFC AppWizard生成的Regular DLL的入/出口。每个Regular DLL都有MFC AppWizard自动生成的一个CWinApp派生类的对象,与MFC应用程序一样,它是在CWinApp派生类的成员函数InitInstance和ExitInstance中完成初始化和终止的工作。 11.2.1 DLL的接口函数 实际上,MFC提供了一个最基本的DllMain函数,用户在这种DLL中不必自己编写DllMain函数,由MFC提供的这个函数在装载DLL时调用InitInstance,而在DLL退出时调用ExitInstance,所需要完成的初始化和终止工作就在这两个函数中完成。 11.2.2 从DLL中导出函数 DLL中定义有两种函数:导出函数(export function)和内部函数(internal function),内部函数只能在DLL内部使用,它的定义和普通函数一样,导出函数可以被其他模块调用,其他模块就需要知道该DLL导出了哪些函数,函数定义接口等信息。DLL中包含有导出表(Export Table),其中有每个导出函数的名字,只有导出表中的函数可以被其他可执行程序调用。 DLL中的导出表可以使用带/EXPORTS开关的DUMPBIN工具来查看。 11.2.2 从DLL中导出函数 下面来讲解从DLL中导出函数的几种方法。 1. 使用DEF文件导出函数 2. 使用关键字__declspec(dllexport) 3. 使用AFX_EXT_CLASS导出 11.3 在应用程序中使用DLL DLL不
您可能关注的文档
最近下载
- 桂皮醛在常用溶剂中稳定性考察—.PDF VIP
- 党群部笔试题目及答案解析.doc VIP
- 党群办公室笔试题目及答案.doc VIP
- 党群部笔试题目及答案.doc VIP
- (2025)党群部笔试题目与答案.docx VIP
- ASTM E1820-24 Standard Test Method for Measurement of Fracture Toughness 断裂韧性测量的标准试验方法.pdf
- 雷克萨斯-Lexus LS-产品使用说明书-LS460L-USF46L-AEZGHC5-LS460LOM50E87C-1509.pdf VIP
- 2014最好的十个企业即时通讯软件排名 .doc VIP
- 2025届职教高考语文复习学习任务3-1科学类文本阅读课件(共95张PPT)(广东省).ppt VIP
- 工段长述职发言稿.pptx VIP
文档评论(0)