Windows程序设计教程 教学课件 作者 郭皞岩 屈景辉 廖琪梅 第12章MFC动态链接库.ppt

Windows程序设计教程 教学课件 作者 郭皞岩 屈景辉 廖琪梅 第12章MFC动态链接库.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows程序设计教程 第12章 MFC动态链接库 动态链接库在Windows中非常重要,几乎所有的Windows API函数都包含在动态链接库中。 动态链接库有很多优点,如节省内存、支持多语种等,特别是当动态链接库(DLL)中的函数改变后,只要不是参数改变,调用这个函数的应用程序就不需要重新编译,这在编程时是十分有用的。 12.1 DLL基本理论 在Windows操作系统中,几乎所有的内容都是以DLL的形式存在的。 例如显示的字体和图标存储在GDI.DLL中;显示Windows桌面、处理用户输入所需要的代码被存储在User.DLL中;Windows编程所需要的大量API函数存储在Kernel.DLL中。 12.1.1 DLL基本概念 应用程序要从目标代码(.obj)外部引用函数,可以通过两种途径实现——静态链接和动态链接。 1.静态链接 该种方式下,链接程序首先对库文件(.lib)进行搜索,直到在某个库中,找到包含函数的对象模块为止。 然后,链接程序把这个对象模块复制到可执行文件(.exe)中。 链接程序负责维护对该函数的所有引用。 2.动态链接 该种方式下,链接程序同样先对库文件(.lib)进行搜索,直到在某个库中,找到所引用函数的输入记录为止。 动态链接库主要有如下优点: (1)系统中,同时运行的多个应用程序可以同时使用同一个动态链接库,它们在内存中共享DLL文件的一个拷贝。 这样做不仅节省了内存,而且减少了文件的动态交换。 (2)只要编写的应用程序的函数变量、返回值的类型、数量不发生变化,动态链接库的函数可以不用重新编译链接,直接使用。 (3)只要遵循一定的规则,不同语言编写的应用程序可以调用同一个动态链接库。 12.1.2 DLL的分类 微软的Visual C++支持3种DLL,它们分别是Non-MFC DLL(非MFC DLL)、Regular DLL(常规DLL)和Extension DLL(扩展DLL)。 1.Non-MFC DLL(非MFC DLL) 2.Regular DLL(常规DLL) 3.Extension DLL(扩展DLL) 12.1.3 DLL的工作原理 应用程序打开动态链接库时,把动态链接库的执行代码映射到进程的地址空间中,这里的进程包括了使用动态链接库的每一个进程。 而动态链接库中的数据,应用程序则不是通过映射方式获取,而是做了一个备份。 也就是说动态链接库所有的执行代码是共享的,但其中的变量,每个应用程序均备份了一份。 1.文件映射 2.引用表 3.内存分配 12.2 简单DLL示例 DLL现在越来越容易编写,Win32已经大大简化了其编程模式,并有许多来自AppWizard和MFC类库的支持。 本节将从一个简单的非MFC DLL实例入手,讨论DLL的一些主要编程思想。 12.2.1 一个简单的DLL 1.DLL的编程实现 2.DLL调用的编程实现 3.例程分析 12.2.2 导出函数 DLL文件中包含一个导出函数表,给出了DLL中每个导出函数的名字和标识号。 另外,函数表中还包含了DLL中函数的地址。 动态链接过程将在加载DLL模块时,动态建立一个函数调用与函数地址的对应表。 因此,如果没有改变导出函数的名字和参数序列,则重新编译或重建DLL文件时并不需要修改应用程序。 从DLL导出函数主要有两种方式: (1)创建模块定义文件(.def),并把导出函数名加入模块定义文件中; (2)在定义函数时使用_declspec(dllexport)关键字。 1.使用模块定义文件导出函数 模块定义文件是一个由多个语句组成的文本文件,根据不同的DLL,其模块定义语句可以不同,但一般来说必须包含以下语句: (1)LIBRARY语句。 (2)DESCRIPTION语句。 (3)EXPORTS语句。 2.使用_declspec(dllexport)关键字输出DLL 用户可以使用_declspec(dllexport)关键字输出DLL里的数据、函数、类等,这样就不再需要DEF文件了。 12

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档