欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第--章-动态链接库(DLL优秀文档.ppt

    • 资源ID:91508651       资源大小:401.04KB        全文页数:27页
    • 资源格式: PPT        下载积分:9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第--章-动态链接库(DLL优秀文档.ppt

    第第10章章 动态链接库(动态链接库(DLL)应用编程应用编程 本章要点:动态链接库(DLL)的概念 动态链接库的编写 动态链接库的隐式调用和显示调用 利用动态链接库实现窗体重用的方法10.1 循序渐进学理论 10.1.1 动态链接库(动态链接库(DLL)概述)概述 1DLL的概念 DLL是一个可以执行的并可以被多个Windows应用程序共享的程序模块(称为Module),模块中包含了一些可以被多个Windows应用程序或DLL共享的代码、数据和资源。动态连接库文件的扩展名一般是dll,也有可能是drv,sys和fon(它们分别对应的是设备驱动文件、系统文件和字体资源文件)。2静态链接和动态链接(1)静态链接 传统的库函数是通过静态链接链到应用程序中的。这些库函数可能来自编程语言提供的标准库,也可能是由操作系统提供的API。图10-10 程序设计界面0集成环境中,执行【File】【New】【Other】命令,将会出现【New Items】对话框窗口,在该窗口中找到【DLL Wizard】图标,如图10-3所示。(1)如果加载的DLL文件不存在或者DLL中没有要引入的例程,程序将自动终止运行;(5)进行函数调用(本题调用语句为:Myfunct(x,y,z););(1)如果加载的DLL文件不存在或者DLL中没有要引入的例程,程序将自动终止运行;(3)用exports语句声明供其它应用程序 调用的函数和过程名为编写该动态链接库,需经过以下步骤:(2)在应用程序中直接调用用extern子句声明的过程。然后编写一个项目文件,在该项目文件中对这三个函数进行调用。传统的库函数是通过静态链接链到应用程序中的。图10-11 程序运行界面要求:在项目文件中采用显式调用的方法调用动态链接库中的函数。(3)修改工程文件,使之能生成DLL文件(2)动态链接 动态链接是指在把应用程序的目标代码链接成EXE文件时并没有将函数库中的函数复制到应用程序的可执行文件中,而是在程序运行时动态地加载所需的函数。3使用DLL的优点 使用动态链接库还有以下优点:(1)应用范围广。(2)便于开发大型软件。(3)便于对系统进行升级。(4)隐藏细节。(5)独立于编程语言。10.1.2 动态链接库(动态链接库(DLL)编写)编写 根据动态链接库完成的功能,可把DLL分成三类:完成一般功能的DLL、用于数据交换的DLL和用于窗体重用的DLL。【例10-1】创建一个动态链接库,该动态链接库中包含两个函数,分别用于求三个数的最大值和最小值。为编写该动态链接库,需经过以下步骤:(1)建立DLL程序框架 在Delphi 7.0集成环境中,执行【File】【New】【Other】命令,将会出现【New Items】对话框窗口,在该窗口中找到【DLL Wizard】图标,如图10-3所示。图10-3 “New Items”对话框 2建立过程和函数 为该动态链接库项目增加如下两个函数:为该动态链接库项目增加如下两个函数:Function Max(x,y,z:Integer):Integer;stdcall;/求三个数的最大值函数 Function Min(x,y,z:Integer):Integer;stdcall;/求三个数的最小值函数 (3)用exports语句声明供其它应用程序 调用的函数和过程名 函数或过程定义好后,为了能够被其它应用程序调用,还必须用Exports子句把函数名列出。本例使用的Exports语句如下:exports Max,Min;Exports语句的格式与功能如下:exportsentry1,entry2,entryn;(4)生成DLL文件执 行【Project】【Build Exam_10_1】命 令(“Exam_10_1”为动态链接库项目文件名),将自动生成名为“Exam_10_1.dll”的动态链接库文件。10.1.3 加载动态链接库(加载动态链接库(DLL)的方法)的方法 1静态载入DLL 这种方法是将DLL文件映像映射到调用进程地址空间的最简单的办法。静态载入DLL的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不包含DLL函数的代码。在程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接进入调用程序的执行空间,从而实现了代码的重用。2动态载入DLL 动态载入方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪些函数,并用LoadLibrary函数加载动态链接库到内存,用GetProcAddress函数动态获得DLL函数的入口地址。动态调用使用的Windows API函数主要有3个,分别是LoadLibrary、GetProcAddress和FreeLibrary。(1)LoadLibrary函数 格式:functionLoadLibrary(LibFileName:PChar):Thandle;功能:加载由参数LibFileName指定的DLL文件。(2)GetProcAddress函数格式:functionGetProcAddress(Module:Thandle;ProcName:PChar):TfarProc;功能:返回参数Module指定的模块中,由参数ProcName指定的过程或函数的入口地址。(3)FreeLibrary函数 格式:procedure FreeLibrary(Module:Thandle);功能:将由参数Module指定的DLL文件从内存中卸载1次。10.1.4 调用动态链接库(调用动态链接库(DLL)中的过程和函数中的过程和函数 在应用程序中,调用动态链接库也有两种方法。分别是隐式调用和显示调用。1隐式调用 隐式调用又称静态调用或装载时调用,对应于DLL的静态载入。要在应用程序中隐式调用某个动态链接库中的函数,一般要做以下两件事情:(1)用extern子句声明要调用的过程或函数及其所在的DLL文件名;(2)在应用程序中直接调用用extern子句声明的过程。【例10-2】编写一个应用程序用来调用例10-1所建立的动态链接库中的Max和Min函数,要求使用隐式调用。程序的设计界面如图10-4所示,函数的运行界面如图10-5所示。程序运行时输入三个数到三个编辑框中,然后按【求最大值】按钮,将会求出三个数的最大值并显示在第四个文本框中,如果按【求最小值】按钮,将会求出三个数的最小值并显示在第四个文本框中。图10-4 例10-2程序设计界面 图10-5 例10-2程序运行界面 2显式调用 静态调用DLL中的函数,程序实现比较简单,代码较少,但也有一些不足,主要表现在:(1)如果加载的DLL文件不存在或者DLL中没有要引入的例程,程序将自动终止运行;(2)DLL文件一旦加载就一直驻留在应用程序的地址空间,即使后面已不再使用它了。显式调用动态链接库中的函数一般需经历以下步骤:(1)定义一个与调用函数一致的函数类型;(2)用LoadLibrary或SafeLoadLibrary函数动态载入动态链接库;(3)用GetProcAddress得到要调用的函数或过程的地址;(4)利用定义的函数类型生成一个同类型的函数变量(本题为Myfunct);(5)进行函数调用(本题调用语句为:Myfunct(x,y,z););(6)利用FreeLibrary函数卸载动态链接库。【例10-3】编写一个应用程序用来调用例10-1所建立的动态链接库中的Max和Min函数,要求使用显示调用。程序的设计界面和运行界面及程序功能同例10-2。在应用程序中,调用动态链接库也有两种方法。(2)编写输出函数或过程,实例化窗体。3 上机练习重应用DLL文件的需要,对工程文件进行相应修改;(1)建立DLL程序框架编写一个动态链接库MyDLL.(2)在应用程序中直接调用用extern子句声明的过程。图10-10 程序设计界面图10-8 弹出的可重用窗体【例10-2】编写一个应用程序用来调用例10-1所建立的动态链接库中的Max和Min函数,要求使用隐式调用。在程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接进入调用程序的执行空间,从而实现了代码的重用。(6)利用FreeLibrary函数卸载动态链接库。使用动态链接库还有以下优点:程序的设计界面如图10-12所示,程序的运行界面如图10-13所示。窗体单元编制完成之后,可把应用程序项目转换为DLL。图10-10 程序设计界面10.1.5 在动态链接库(在动态链接库(DLL)中实现窗体重用中实现窗体重用 利用DLL实现窗体重用一般需经历以下几步:(1)在Delphi的集成开发环境中,设计出需要重用的窗体;(2)编写一个用于输出的函数或过程,在该函数或过程中,对设计的窗体进行创建使它实例化;(3)如果要把多个窗体编译在一个DLL文件中,可重复(1)和(2),直到所有需要的窗体建立完毕,所有对窗体进行实例化的函数或过程创建完毕;(4)为适应生成.DLL文件的需要,对工程文件进行相应修改;(5)编译工程文件以生成DLL文件;(6)在需要该窗体的其它应用程序中重用该窗体。【例10-4】在许多应用程序中都有在两个列表框中移动选项的窗体,请设计一个这样的可重用窗体,设计界面如图10-6所示。该窗体运行时,在左边的列表框中选中若干个选项后按【】按钮,将把选中的选项移动到右边的列表框中;在右边的列表框中选中若干个选项后按【】按钮将把左边的列表框中的所有选项移动到右边的列表框中;按【】按钮,将把选中的选项移动到右边的列表框中;Function Min(x,y,z:Integer):Integer;stdcall;/求三个数的最小值函数【练习题目】(3)如果要把多个窗体编译在一个DLL文件中,可重复(1)和(2),直到所有需要的窗体建立完毕,所有对窗体进行实例化的函数或过程创建完毕;(3)用exports语句声明供其它应用程序 调用的函数和过程名(6)利用FreeLibrary函数卸载动态链接库。图10-10 程序设计界面执行【Project】【Build Exam_10_1】命令(“Exam_10_1”为动态链接库项目文件名),将自动生成名为“Exam_10_1.动态链接是指在把应用程序的目标代码链接成EXE文件时并没有将函数库中的函数复制到应用程序的可执行文件中,而是在程序运行时动态地加载所需的函数。动态调用使用的Windows API函数主要有3个,分别是LoadLibrary、GetProcAddress和FreeLibrary。图10-4 例10-2程序设计界面(2)在应用程序中直接调用用extern子句声明的过程。【例10-3】编写一个应用程序用来调用例10-1所建立的动态链接库中的Max和Min函数,要求使用显示调用。(4)利用定义的函数类型生成一个同类型的函数变量(本题为Myfunct);在$R资源指令和工程的uses指令的最后一行之间,插入关键字export,后跟单元的访问过程或函数名称(在本例中,就是ListMoveF),如果有多个窗体要重用,可列出多个函数或过程名;为完成本题的功能,应经历以下步骤。图10-10 程序设计界面 图10-11 程序运行界面 10.3 上机练习重应用 10.3.1 上机练习一:一维数组求值相关算法动上机练习一:一维数组求值相关算法动 态链接库的编制态链接库的编制 【练习【练习题目题目】编写一个动态链接库MyDLL.DLL,为该动态链接库创建四个函数Max、Min、Sum和Aver,分别用来求具有N(参数)个元素的一维数组的最大值、最小值、总和及平均值。然后再创建一个应用程序,通过对这些函数进行显式调用(又称动态调用)来求产生的由10个两位随机数组成的一维数组的最大值、最小值、总和及平均值。程序的设计界面如图10-12所示,程序的运行界面如图10-13所示。程序运行时单击【产生数组】将产生10个两位随机数并存放一个一维数组中,同时把数组元素的值显示在第一个编辑框中。然后在组合框中选中相应的运算类型,再单击【计算】按钮将根据运算类型得到相应的结果并显示在第二个编辑框中。图10-12 调用程序设计界面 图10-13 调用程序运行界面

    注意事项

    本文(第--章-动态链接库(DLL优秀文档.ppt)为本站会员(知****量)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开