20
实实实实实实实实实 实4实 实实实实实 实实 实实实实实实实实实实 实实实实 实实实实实实实实实— C++ 实实实实

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

  • Upload
    vea

  • View
    45

  • Download
    0

Embed Size (px)

DESCRIPTION

实用软件工具与环境 第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 的编程事例 - PowerPoint PPT Presentation

Citation preview

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

实用软件工具与环境

第 4 章 动态连接库

诀窍详细内容请参阅谭德强 姜波主编

《实用软件工具与环境— C++高级编程》

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

本章主要教学内容 什么是动态连接库( DLL ) 动态连接库有哪些种类,各有些什么特点 如何在 Visual C++ 中生成和使用动态连接

库 利用 Visual C++ 软件开发环境编制一个

DLL 程序的实例

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

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

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

4.1 动态连接库( DLL )概述 作用:

通过创建和使用 DLL ,可以方便地实现多个用户对DLL 的共享(通过库文件和函数调用说明文件)

DLL 类似 C 原文件,提供函数、资源和数据通过 DLL 的使用可方便的实现应用程序的本地化

DLL 与可执行文件的区别和联系:DLL 要求一个 DEF (模块定义文件)DLL 要求一个 DllMain ()的入口点DLL 可以装入,但不能执行

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

4.1 动态连接库( DLL )概述( C )

4.1.1 DLL 的定义 DLL 是应用程序中的一段程序,是一个可以

从 .exe 文件中单独执行的模块。 DLL 是其它应用程序在执行时能够动态链接

和调用的一组服务或函数。 DLL 是 Windows 程序设计非常有用的一种

方法。

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

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

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

4.1 动态连接库( DLL )概述( C )

4.1.3 动态连接库和静态连接库的比较 区别:

使用静态链接库,其函数代码包含在应用程序中使用动态链接库,只需包含函数信息即可

动态链接库的优点:有利于程序共享多个程序使用 DLL 的单一映射,节约内存空间通过程序拆分,有利于程序升级可以节约大量硬盘空间

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

4.2 DLL 的基本理论4.2.1 DLL 的入出口函数

被系统调用,以完成 DLL 的初始化和终止工作。⒈DllMain 函数

一般 DLL 的入出口函数,需自己编写代码 一个 DLL 调用和撤除时被调用 函数结构: p.85

⒉MFC 的 Regular DLL 入出口 由 MFC 提供,不必自己编写代码 装时调用 InitInstance ,卸时调用 ExitInstance

应用程序使用LoadLibrary 和 FreeLibrary等函数及进程、线程启动和终止时。

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

4.2 DLL 的基本理论( C )

4.2.2 DLL 的链接方式⒈ 隐式链接动态链接库

应用程序通过说明 DLL 的导入库文件( lib )链接, lib 文件中包含一系列指向动态链接库的指针

应用程序必须获得的有关 DLL 的信息:包含导出函数以及类声明的头文件,需要知道函数名

和函数接口信息DLL 的导入库文件(应用程序编译链接时使用),使

用 Project|Add To Project/Setting 选择 lib 文件实际的 DLL 文件(应用程序运行时调用)

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

4.2 DLL 的基本理论( C )

4.2.2 DLL 的链接方式( C )⒉ 显式链接动态链接库

应用程序在运行时通过函数调用显式装载和卸载DLL ,并通过函数指针调用 DLL 的导出函数

函数使用的基本方式:DLL 的装载函数: LoadLibrary 或 AfxloadLibrary获取导出函数指针函数: GetProcAddressDLL 的卸载函数: FreeLibrary 或 AfxFreeLibrary

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

4.2 DLL 的基本理论( C )

4.2.3 动态连接库库函数的导出⒈ 在源程序中使用关键字 _declspec(dllexport)

根据一个指定的存储类属性,存储某个项目数据。从动态连接库文件中输出数据、函数、类、类成员函数,而不需要 DEF 文件。

语法如下:_declspec(extended-attribute) declarator ;

在应用程序中使用关键字 _declspec(dllimport) 引入 DLL 中的数据、函数以及类

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

4.2 DLL 的基本理论( C )

4.2.3 动态连接库库函数的导出( C )⒉ 在 DEF 中通过 EXPORTS 来声明函数

DEF 是由一个或多个描述 DLL 属性的语句组成的文本文件,一般包括五个语句的描述项( P.88 )。

库函数的声明如下:entryname[=internalname][@ordinal[NONAME]]

⒊其它方法 在 LINK命令中用 /EXPORT参数指定导出函数 在 MFC 扩展 DLL 中使用宏导出成员函数或整个类

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

4.2 DLL 的基本理论( C )

4.2.4 从 DLL 中导出数据变量⒈ 使用 DEF 文件,设置关键字 CONSTANT

导出⒉ 在应用程序中使用如下关键字引入对 DLL

导出变量的使用: _declspec(dllimport)

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

4.3 用 VC++ 开发环境生成 DLL

4.3.1 用 VisualC++ 生成 Win32 DLL⒈ 空 DLL 工程:

不包括任何自动生成的文件⒉ 简单的 DLL 工程:

自动生成只有一个默认的 DllMain 函数的主程序⒊导出变量、函数和类的 DLL

生成 DllMain 函数框架较为完整,定义了一个类 使用关键字 _declspec() 导出 /导入函数 使用 lib 文件链接动态链接库

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

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 应用程序调用

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

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 工程添加到应用程序工作区中同时开发

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

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

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

4.6 本章小结动态连接库的基本概念(与静态连接库区

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

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

4.7 思考与练习

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

序号

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