- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第18章 二进制码功能模块-动态链接库(DLL) 动态链接库(DLL)是一种软件模块,使用动态链接库可以很方便地将开发者编写的功能模块应用到不同语言的程序中。使用动态链接库更方便的在于不必重新编译该DLL中的代码逻辑,缩短了编译调试的时间,从而大大提高了软件进化的效率。本章的主要内容如下。 DLL理论基础:读者将学会DLL理论的基础理论,了解DLL导入导出的基本原理、隐式和显式连接,以及符号和序号连接等基本概念。 DLL自动化组件的开发:读者将学会使用自动化来开发DLL组件,通过实例,掌握DLL自动化接口的开发。 DLL的调用:通过实例实践,读者将学会调用自己开发的DLL组件,并学会在VB Script和JavaScript中使用。 18.1 DLL理论基础 DLL文件是一种可执行文件,但它不能像EXE可执行文件一样在Windows系统平台直接运行,它需要有其他应用程序作为运行母体,许多大的软件程序(如Windows操作系统)都由很多模块(多个功能)组成,这些模块分别完成相对独立的功能,它们可以拆分出来重组,又可以彼此协作来完成整个软件系统的工作。在开发软件系统时,如果将所有模块的源代码都集成到整个应用程序 EXE 文件中,会产生一些问题: 增加应用程序的体积,使得应用程序过于庞大,浪费存储空间和内存消耗。 在开发这种“综合型”应用程序时,需要更多的编译时间和更高的逻辑复杂度,客观上造成了软件开发的困难。 18.1.1 DLL导入和导出的原理 DLL文件中如何导出或导入功能函数的呢?它的接口就在于DLL文件中包含的导出函数表,客户程序可以通过表中的函数ID或符号函数来识别并调用这些功能函数。也就是说,客户程序使用DLL文件时,无需知道它调用的函数地址(而且在调用前,DLL还没有加载到内存中,自然就没有地址),只需要提供函数符号或函数ID即可。当客户程序提交调用函数信息后,动态链接库的进程将会建立一张表,这张表将客户的调用和DLL文件中函数的地址连接起来。如果仅仅是对DLL文件中的函数功能进行修改,则无需改动客户程序或重新注册DLL文件,这点与同一个项目中的函数调用是一致的。只有当DLL功能提供者改变了DLL中的自动化接口才需要修改客户程序,但也无需重新注册。 18.1.2 隐式和显式连接 隐式连接是在Visual C++中常用的DLL连接方法,当开发环境创建DLL文件时,系统也会生成一个“*.LIB”文件,该文件就包含了导出符号和序号等基本信息,当客户程序装载DLL文件时,Windows操作系统将自动根据符号来选择连接,隐式连接常用于编译型的程序设计语言中。 显式连接常用于解析型的编程语言,如VB Script、Javascript等,显示连接不用导入DLL文件进行连接,而是在解释时调用LoadLibrary()函数等函数将DLL的自动化类导入进来,假设有一个DLL编写了一个可以导出的函数: extern”C” __declspec(DLLexport) double Add(double n1,double n2); 18.1.3 符号和序号连接 符号连接其实就是通过函数名的调用进行的连接,而序号连接则调用函数序号进行连接,它的优势在于客户程序的执行文件将比前者更小,不必使用导入函数名等一系列代码操作。下面是从MFC库的DEF文件中摘抄出来的一部分: ??0_AFX_SOCK_STATE@@QAE@XZ @ 256 NONAME ??0CAsyncSocket@@QAE@XZ @ 257 NONAME ??0CNoTrackObject@@QAE@XZ @ 258 NONAME ??0CSocket@@QAE@XZ @ 259 NONAME ??0CSocketFile@@QAE@PAVCSocket@@H@Z @ 260 NONAME ??0CSocketWnd@@QAE@XZ @ 261 NONAME 18.1.4 DllMain()函数 DLL文件不是执行文件,不能直接执行,也就是它天生就是被其他客户程序使用的,当DLL文件被加载时,将会调用_DllMainCRTStartup()函数,该函数调用全局对象的构造函数,而全局对象的构造函数体中调用了全局函数DllMain()。 当开发者不定义DllMain()函数时,系统将自动生成一个不做任何事情的DllMain()函数。以下代码是DllMain()函数框架如代码示例18.2所示。 18.2 DLL使用实例-定义DLL函数并使用 【本小节示例参考:\源代码\C18\myMath】 本节简介使用MFC库进行DLL的开发和使用,具体操作是使用应用程序向导创建MFC DLL项目,然后在Windows系统中注册该DLL文件,最后使用VB Script和HTML中的J
您可能关注的文档
最近下载
- 2025年中考数学压轴题专练:二次函数综合(面积问题)(含解析).docx VIP
- 2009~2012社保缴费基数(全国).pdf
- 2025年中考数学压轴题专练:二次函数与圆综合.docx VIP
- 轻金属冶金学12镁冶金学第二讲热还原法原理与过程.ppt VIP
- 2023 CCF 非专业级软件能力认证 CSP-S 第二轮认证 提高级.pdf
- 广东省房屋建筑工程竣工验收技术资料统一用表(2024版).pdf
- 江苏省苏州外国语学校2024届高三下学期5月月考英语试题试卷含解析.doc VIP
- 2024 CCF 非专业级软件能力认证 CSP-S 第二轮认证 提高级.pdf
- 儿童手功能PPT课件.pptx VIP
- 2023年江苏省苏州外国语学校高考英语倒计时模拟卷(含答案解析).doc VIP
文档评论(0)