1 / 20

实用软件工具与环境 第4章 动态连接库

实用软件工具与环境 第4章 动态连接库. 诀窍 详细内容请参阅谭德强 姜波主编 《 实用软件工具与环境— C++ 高级编程 》. 本章主要教学内容. 什么是动态连接库( DLL ) 动态连接库有哪些种类,各有些 什么特点 如何在 Visual C++ 中生成和使用动态连接库 利用 Visual C++ 软件开发环境编制一个 DLL 程序的实例. 第4章 动态连接库. 4.1 动态连接库( DLL) 概述 4.2 DLL 的基本理论 4.3 用 VC++ 开发环境生成 DLL 4.4 使用 DLL 4.5 用 VC++ 开发 DLL 的编程事例

vea
Télécharger la présentation

实用软件工具与环境 第4章 动态连接库

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实用软件工具与环境第4章 动态连接库 诀窍 详细内容请参阅谭德强 姜波主编 《实用软件工具与环境—C++高级编程》

  2. 本章主要教学内容 • 什么是动态连接库(DLL) • 动态连接库有哪些种类,各有些什么特点 • 如何在Visual C++中生成和使用动态连接库 • 利用Visual C++软件开发环境编制一个 DLL 程序的实例

  3. 第4章 动态连接库 4.1 动态连接库(DLL)概述 4.2 DLL的基本理论 4.3 用VC++开发环境生成DLL 4.4 使用DLL 4.5 用VC++开发DLL的编程事例 4.6 本章小结 4.7 思考与练习

  4. 4.1 动态连接库(DLL)概述 • 作用: • 通过创建和使用DLL,可以方便地实现多个用户对DLL的共享(通过库文件和函数调用说明文件) • DLL类似C原文件,提供函数、资源和数据 • 通过DLL的使用可方便的实现应用程序的本地化 • DLL与可执行文件的区别和联系: • DLL要求一个DEF(模块定义文件) • DLL要求一个DllMain()的入口点 • DLL可以装入,但不能执行

  5. 4.1 动态连接库(DLL)概述(C) 4.1.1 DLL的定义 • DLL是应用程序中的一段程序,是一个可以从.exe文件中单独执行的模块。 • DLL是其它应用程序在执行时能够动态链接和调用的一组服务或函数。 • DLL是Windows程序设计非常有用的一种方法。

  6. 4.1 动态连接库(DLL)概述(C) 4.1.2 DLL的种类(由MFC AppWizard支持生成) • Win32 DLL • 空DLL工程 • 简单的DLL工程 • 导出变量、函数和类的DLL • MFC AppWizard DLL • 静态链接MFC的Regular DLL • 动态链接MFC的Regular DLL • 动态链接MFC的扩展(Extension) DLL

  7. 4.1 动态连接库(DLL)概述(C) 4.1.3 动态连接库和静态连接库的比较 • 区别: • 使用静态链接库,其函数代码包含在应用程序中 • 使用动态链接库,只需包含函数信息即可 • 动态链接库的优点: • 有利于程序共享 • 多个程序使用DLL的单一映射,节约内存空间 • 通过程序拆分,有利于程序升级 • 可以节约大量硬盘空间

  8. 4.2 DLL的基本理论 4.2.1 DLL的入出口函数 • 被系统调用,以完成DLL的初始化和终止工作。 ⒈DllMain函数 • 一般DLL的入出口函数,需自己编写代码 • 一个DLL调用和撤除时被调用 • 函数结构:p.85 ⒉MFC的Regular DLL入出口 • 由MFC提供,不必自己编写代码 • 装时调用InitInstance,卸时调用ExitInstance 应用程序使用LoadLibrary 和FreeLibrary等函数及进程、线程启动和终止时。

  9. 4.2 DLL的基本理论(C) 4.2.2 DLL的链接方式 ⒈隐式链接动态链接库 • 应用程序通过说明DLL的导入库文件(lib)链接,lib文件中包含一系列指向动态链接库的指针 • 应用程序必须获得的有关DLL的信息: • 包含导出函数以及类声明的头文件,需要知道函数名和函数接口信息 • DLL的导入库文件(应用程序编译链接时使用),使用Project|Add To Project/Setting选择lib文件 • 实际的DLL文件(应用程序运行时调用)

  10. 4.2 DLL的基本理论(C) 4.2.2 DLL的链接方式(C) ⒉显式链接动态链接库 • 应用程序在运行时通过函数调用显式装载和卸载DLL,并通过函数指针调用DLL的导出函数 • 函数使用的基本方式: • DLL的装载函数:LoadLibrary或AfxloadLibrary • 获取导出函数指针函数:GetProcAddress • DLL的卸载函数:FreeLibrary或AfxFreeLibrary

  11. 4.2 DLL的基本理论(C) 4.2.3 动态连接库库函数的导出 ⒈在源程序中使用关键字_declspec(dllexport) • 根据一个指定的存储类属性,存储某个项目数据。从动态连接库文件中输出数据、函数、类、类成员函数,而不需要DEF文件。 • 语法如下: _declspec(extended-attribute) declarator; • 在应用程序中使用关键字_declspec(dllimport)引入DLL中的数据、函数以及类

  12. 4.2 DLL的基本理论(C) 4.2.3 动态连接库库函数的导出(C) ⒉在DEF中通过EXPORTS来声明函数 • DEF是由一个或多个描述DLL属性的语句组成的文本文件,一般包括五个语句的描述项(P.88)。 • 库函数的声明如下: entryname[=internalname][@ordinal[NONAME]] ⒊其它方法 • 在LINK命令中用/EXPORT参数指定导出函数 • 在MFC扩展DLL中使用宏导出成员函数或整个类

  13. 4.2 DLL的基本理论(C) 4.2.4 从DLL中导出数据变量 ⒈使用DEF文件,设置关键字CONSTANT导出 ⒉在应用程序中使用如下关键字引入对DLL导出变量的使用:_declspec(dllimport)

  14. 4.3 用VC++开发环境生成DLL 4.3.1 用VisualC++生成Win32 DLL ⒈空DLL工程: • 不包括任何自动生成的文件 ⒉简单的DLL工程: • 自动生成只有一个默认的DllMain函数的主程序 ⒊导出变量、函数和类的DLL • 生成DllMain函数框架较为完整,定义了一个类 • 使用关键字_declspec()导出/导入函数 • 使用lib文件链接动态链接库

  15. 4.3 用VC++开发环境生成DLL 4.3.2 用VisualC++的MFC生成Win32DLL ⒈静态链接MFC的Regular DLL • 内部使用MFC的DLL库,建立时使用MFC静态库 • 自动生成入出口函数、DEF文件、C接口导出函数 ⒉动态链接MFC的Regular DLL(与⒈类似) • 建立时使用MFC动态库,调用函数使用特殊的宏 ⒊动态链接MFC的扩展(Extension)DLL • 从已有的MFC类派生新类的DLL,使用MFC动态库 • 导出函数只由使用MFC动态库的MFC应用程序调用

  16. 4.4 使用DLL 4.4.1 DLL的使用 ⒈DLL的查找位置:⒉DLL的通常存放位置 4.4.2 DLL的调试 ⒈使用应用程序调式DLL • Project|Settings|Debug|Category|Additional ⒉使用DLL的工程调式DLL • Project|Settings|Debug|Category|Additional ⒊同时使用应用程序和DLL的工程调式DLL • 将DLL工程添加到应用程序工作区中同时开发

  17. 4.5 用VC++开发DLL的编程事例 4.5.1 用MFC生成DLL ⒈动态连链库(DLL)工程的建立 ⒉创建测试动态链接库的应用程序

  18. 4.6 本章小结 • 动态连接库的基本概念(与静态连接库区别) • 动态连接库的基本理论(显示与隐式连接) • 动态连接库中库函数与变量的导出方式 • VisualC++中DLL的类型及它们的特点 • 创建动态连接库程序及测试程序事例

  19. 4.7 思考与练习

  20. 序号 ⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛ ⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇ ①②③④⑤⑥⑦⑧⑨⑩

More Related