




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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_STATEQAEXZ 256 NONAME ?0CAsyncSocketQAEXZ 257 NONAME ?0CNoTrackObjectQAEXZ 258 NONAME ?0CSocketQAEXZ 259 NONAME ?0CSocketFileQAEPAVCSocketHZ 260 NONAME ?0CSocketWndQAEXZ 261 NONAME,18.1.4 DllMain()函数,DLL文件不是执行文件,不能直接执行,也就是它天生就是被其他客户程序使用的,当DLL文件被加载时,将会调用_DllMainCRTStartup()函数,该函数调用全局对象的构造函数,而全局对象的构造函数体中调用了全局函数DllMain()。 当开发者不定义DllMain()函数时,系统将自动生成一个不做任何事情的DllMain()函数。以下代码是DllMain()函数框架如代码示例18.2所示。,18.2 DLL使用实例定义DLL函数并使用,【本小节示例参考:源代码C18myMath】 本节简介使用MFC库进行DLL的开发和使用,具体操作是使用应用程序向导创建MFC DLL项目,然后在Windows系统中注册该DLL文件,最后使用VB Script和HTML中的Javascript来调用该DLL的功能函数。本节的实例是开发一个数学DLL,这个DLL封装了一些常用的数学函数,主要如下: 求两个数之和:传递参数为两个实数,返回值为两个参数之和。 求圆的面积:传递参数是圆的半径,返回值为圆的面积。 求平面坐标中任意两点的距离:通过传递两个点的坐标,返回两个点的距离。,18.2.1 创建MFC DLL自动化项目,MFC DLL是使用Visual C+6.0常开发的DLL项目模式,在Visual C+6.0中使用MFC类型的DLL开发,可以将MFC的代码框架优势充分表现出来,使程序设计更加快捷的同时,也不至于出现更抽象的函数调用,MFC DLL项目创建步骤如下:,18.2.2 添加自动化类和成员函数,MFC DLL要提供自动化函数才能提供对外接口,而自动化函数需要定义一个自动化的类,创建该类后再添加3个基本的数学运算功能。 求两个数之和:传递参数为两个实数,返回值为两个参数之和。 求圆的面积:传递参数是圆的半径,返回值为圆的面积。 求平面坐标中任意两点的距离:通过传递两个点的坐标,返回两个点的距离。,18.2.3 在Windows中注册自定义的DLL动态链接库,如果DLL文件没有在Windows系统中注册,则客户程序则不知道该DLL文件存放在何处,甚至不知道该DLL文件是否存在。因此,使用自定义DLL文件需要先向操作系统注册。以本小节的DLL文件为例,在Windows系统注册DLL的步骤如下:,18.2.4 使用非Visual C+应用程序调用自定义DLL,VB Script脚本语言在Windows应用程序和Web应用程序中非常常用,也是使用DLL,操作步骤如下:,18.2.5 开发小结,本节以VB Script和HTML中使用Javascript来调用DLL文件的方式来测试MFC DLL项目,其实DLL是二进制文件代码,它可以被任何程序设计语言调用,如Delph、Java或PASCAL等。读者容易弄错的地方主要有两个。 理所当然地认为可以随意手动添加自动化函数:虽然使用集成开发环境添加的代码都可以使用手动输入,理论上是成立的,但读者容易忽略idl文件的改写,并且在idl文件改写中容易出现语法错误。 DLL文件没有在Windwos中注册:出现该问题,将导致在VB Script的定义对象语句出现找不到该模块的错误: Set obj = CreateObject(“myMath.MathMyDll“) DLL动态链接库技术使得不同编程语言中的代码模块共享成为可能,并形成一种行的软件架构趋势,如C+程序员也可以很方便地使用C+语言编写ASP服务器端的应用程序模块,一方面可以使用自己熟手的语言开发复杂的逻辑,另外也提高了ASP服务器端程序的运行效率。,18.3 小结,本章是DLL自动化组件开发的章节,着重介绍了自动化理论和DLL动态链接库的开发和使用。通过本章的学习,读者应该掌握的内容如下: DLL理论基础:理解DLL理论的基础理论,了解DLL导入导出的基本原理、隐式和显式连接,以及符号和序号连接等基本概念。 DLL自动化组件的开发:熟练掌握使用自动化来开发DLL组件,并掌握DLL自动化接口的开发。 DLL的调用:熟练掌握调用自己开发的DLL组件,并掌握在VB Script和JavaScript中使用。,本章习题,一、填空题 1COM的中文全称是_。 2DLL的中文全称是_。 二、选择题 1关于组件的说法,以下说法正确的是( )。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 24年军队护理文职笔试题库及答案
- 老龄化社会2025年老年教育需求增长与混合现实教学模式研究报告
- 湖北省2025年度执业药师职业资格考试执业药师复习题库及答案
- 2025年中国高弹服装数据监测研究报告
- 2025年中国迷你油动跑车模型数据监测报告
- 2025年中国二孔过滤分液器数据监测研究报告
- 2025年5G网络对远程会议的改进
- 2025年5G网络对城市交通优化的作用分析
- 2025年中国对氰苯胺数据监测报告
- 2025年中国豪华型发电机数据监测报告
- 新式茶饮基础知识培训课件
- 2025新疆天泽和达水务科技有限公司部分岗位社会招聘28人笔试模拟试题及答案解析
- 巧堆肥劳动课件
- 技术方案评审表-技术选型决策
- 万用表专业培训资料共23张课件
- 启闭机设备安装与调试施工方案
- 2025年中职历史考试题及答案
- 神经外科进修汇报总结
- 图书出口管理办法
- 高三后期班级管理课件
- 生物安全实验室管理体系文件
评论
0/150
提交评论