- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章 动态链接库 13.1 DLL基础知识 本节讲述DLL的基础知识。 13.1.1 DLL概述 Windows系统平台上提供了一种完全不同的有效的编程和运行环境,可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。Windows自己就将一些主要的系统功能以DLL模块的形式实现。 13.1.2 认清DLL与LIB DLL与LIB的相似之处是它们都是将一部分可执行代码以及数据放在库中供用户程序使用,而且在使用时,这些代码就象是用户程序本身的一部分。 LIB文件是静态链接库文件,在其中放置了许多的函数和变量。其中一部分函数和变量是供内部使用的,在接口中不可见,即没有输出;另一部分是供接口使用的(当然内部函数也可以使用),外部可见,从而应用程序可以调用这些输出的函数和变量。 在DLL中同样包括许多变量和函数,也分为内部变量、函数和外部接口函数、变量。对于内部的函数和变量,供DLL自己调用,因此并不包含名称,只使用地址;对于供外部调用的函数和变量,在内部的时候也使用地址,只是在头文件中包含了输出变量和函数的名称,而且包含了这些名称所对应的地址,即将名称和地址对应起来。通过这些名称就可以查找对应变量和函数的地址(函数的地址是指函数入口点的地址)。 13.1.3 认清DLL与EXE DLL和EXE都是Windows下的可执行模块,在对应的文件结构上,它们也类似的:具有文件头,重定位信息表,导入动态库表等,另外,DLL作为供程序调用的服务者,文件中还包含导出的函数表和变量表。 DLL是服务的提供者,主要用来提供输出变量和函数供别的程序调用,在DLL被装入的时候,以及进程中创建线程的时候,Windows都会以不同的参数调用入口点函数,然后该函数进行某些初始化工作后返回,DLL的执行就停止了。Windows并不为DLL创建单独的进程空间,而是将其装入共享地址,然后将其映射到不同的进程供进程调用,从而达到代码共享的目的。 EXE是DLL所提供服务的使用者,调用DLL中的输出的函数和变量,每一个EXE在运行的时候,Windows均为它创建单独的进程环境,包括进程地址空间,EXE就在它的地址空间中运行,对别的进程是不透明的,因此也就无法为别的进程调用,因此在许多情况下只能使用DLL来实现某些功能。 13.1.4 DLL的两种动态链接方法 加载时动态链接 由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,但不够灵活,只能满足一般要求。 运行时动态链接 是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。 13.2 DLL入/出口函数 Win32 DLL与 Win16 DLL有很大的区别,这主要是由操作系统的设计思想决定的。一方面,在Win16 DLL中程序入口点函数和出口点函数(LibMain和WEP)是分别实现的;而在Win32 DLL中却由同一函数DLLMain来实现。无论何时,当一个进程或线程载入和卸载DLL时,都要调用该函数。 13.2.1 DllMain函数 每一个DLL必须有一个入口点,DLLMain是一个缺省的入口函数。DLLMain负责初始化(Initialization)和结束(Termination)工作,每当一个新的进程或者该进程的新的线程访问DLL时,或者访问DLL的每一个进程或者线程不再使用DLL或者结束时,都会调用DLLMain。但是,使用TerminateProcess或TerminateThread结束进程或者线程,不会调用DLLMain。 13.2.2 MFC AppWizard 生成的Regular DLL入/出口 MFC AppWizard 生成的Regular DLL在后面的章节会有介绍,这里只讨论它的入/出口点问题。 每个Regular DLL都有MFC AppWizard 自动生成的CWinApp派生类的对象,与其它MFC应用程序一样,它是在CWinApp派生类的成员函数InitInstance和ExitInstance完成初始化和终止的工作。 实际上,MFC提供了一个基本的DllMain函数,在这种DLL中不必自己编写DllMain函数,由MFC提
您可能关注的文档
- Visual Basic程序设计教程(第二版) 郭清溥 1新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 2新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 3新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 4新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 5新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 6新.ppt
- Visual Basic程序设计教程(第二版) 郭清溥 8新.ppt
- Visual Basic程序设计项目化教程 管小清 项目1 搭建VB运行环境新.ppt
- Visual Basic程序设计项目化教程 管小清 项目2 制作折扣计算器新.ppt
- Visual Basic程序设计项目化教程 管小清 项目3 制作阴影文字新.ppt
- 终身学习背景下,2025年在线教育平台教育科技创业政策与制度研究报告.docx
- 湖南省长沙市雅礼教育集团2024-2025学年高一下学期3月月考地理试题(原卷版).pdf
- 2025年物流行业智能化设备租赁市场行业创新引领趋势与机遇研究报告.docx
- 2025年中小企业数字化转型困境突破:工业互联网平台与边缘计算技术融合报告.docx
- 供应链风险管理2025年大数据分析预警在建筑材料供应链的应用案例分析.docx
- 金融科技助力消费金融风控升级:2025年智能风控技术应用案例分析报告.docx
- 2025年智能制造车间智能仓储物流设备集成应用中的智能仓储系统与仓储管理软件融合报告.docx
- 2025年农业智能灌溉系统在果树种植中的应用效果报告.docx
- 2025年金融客户服务个性化推荐系统在金融行业市场拓展中的应用.docx
- 轨道交通车站智能化服务升级对乘客出行效率影响分析报告.docx
文档评论(0)