动态链接库基本概念

简介: 一、DLL与操作系统 动态链接库DLL是windows操作系统的基础。windowsAPI中的所有函数都包含在DLL中。操作系统的核心功能、系统服务、应用程序等多数是由一组动态链接库实现的。

一、DLL与操作系统

动态链接库DLL是windows操作系统的基础。windowsAPI中的所有函数都包含在DLL中。操作系统的核心功能、系统服务、应用程序等多数是由一组动态链接库实现的。动态链接库具有节省内在,支持多语种等多种好处。其中主要的是当动态链接库中的函数改变后,只要不改变参数,调用这个函数的应用程序并不需要重新编译,这样就可以减少应用程序的资源开销,提高效率。


二、什么是DLL

   动态链接库DLL,Dynamic link library是在程序执行时,被动态地装载运行以完成一些通用功能的代码集合。它也可以是可执行文件 ,但是不能像EXE都样直接运行,而是用于为其他的可执行文件 (EXE文件或者其他DLL)提供共享代码的库。使用动态链接库,该文件 DLL不用被包含在最终的EXE文件中,EXE文件在执行时可动态地引用和卸载这个独立的DLL文件。与动态链接库相对应的,还有一种提供共享代码的方式的静态链接库,二者的主区别是使用方法的不同。


三、DLL的工作原理

在DLL中包含函数或类的执行代码和一个表,表中包含了函数的名字和地址。当加载DLL时可通过指针引出表,在表中查询并返回DLL要调用的函数地址,然后执行函数代码。如下图所示:

image


动态链接库所有的执行代码是共享的,可以有多个进程同时共享它的代码。

DLL是一个相对独立的应用程序,有它自己的模块够本和模块资源,多个应用程序可以同时使用一个DLL模块。但是不管有多少进程访问DLL,同一个DLL在内存中仅仅有一份。

windows对DLL提供访问自动计数功能,当访问计数大于或等于2时,DLL被加载到内存,而计数减为0时,DLL模块会自动卸载以释放其占有的内存空间。


四、DLL的分类

VC++一般支持3种DLL,分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC 扩展DLL)。


1、非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口;


2、MFC规则DLL采用MFC类库编写,其源文件中包含一个继承自CWinAPP的类,但是没有消息循环;


3、MFC扩展DLL采用MFC的动态链接版本创建,只能被用MFC类库所编写的应用程序调用,MFC扩展DLL支持C++接口,即该DLL可以导出定义在其内的类,应用程序可以构造这些类的对象,也可以从这些类派生。


五、导入/导出

导入是把DLL中的函数代码(或其他数据)插入到应用程序的过程;导出是把DLL中的函数代码(或其他数据)暴露出来为其他应用程序所使用的过程。

在开发DLL时,需要把一些函数或类导出,这些函数或类就被称为导出函数或导出类,而在使用DLL时,则需要把这些DLL的导出内容导入到应用程序中。

相关文章
|
Prometheus Kubernetes 监控
Prometheus 与 Kubernetes 的集成
【8月更文第29天】随着容器化应用的普及,Kubernetes 成为了管理这些应用的首选平台。为了有效地监控 Kubernetes 集群及其上的应用,Prometheus 提供了一个强大的监控解决方案。本文将详细介绍如何在 Kubernetes 集群中部署和配置 Prometheus,以便对容器化应用进行有效的监控。
811 4
|
JavaScript
开发中遇到的echarts常见问题
开发中遇到的echarts常见问题
1188 9
|
12月前
|
网络架构
直通和交叉电缆:网络连接的桥梁
【10月更文挑战第15天】
585 5
|
存储 人工智能 NoSQL
现代数据库技术演进与应用前景分析
本文探讨了现代数据库技术的演进历程及其在各领域的应用前景。首先介绍了传统数据库的局限性,随后分析了NoSQL、NewSQL以及分布式数据库等新兴技术的特点和优势。接着探讨了人工智能、物联网、大数据等领域对数据库技术提出的新要求,并展望了未来数据库技术的发展趋势与应用前景。
|
负载均衡 Java Linux
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,
|
并行计算 Ubuntu
Ubuntu安装CUDA和cuDNN
Ubuntu安装CUDA和cuDNN
1054 3
|
机器学习/深度学习 监控 算法
了解YOLO算法:快速、准确的目标检测技术
了解YOLO算法:快速、准确的目标检测技术
4093 0
|
安全 Cloud Native 算法
携手中科海光,龙蜥社区正式上线首个 CSV 机密容器解决方案
龙蜥 8.4已经正式支持基于海光 CSV 技术的机密容器,实现了容器从镜像下载到运行整个生命周期的安全性,是社区首个机密容器完整解决方案。
携手中科海光,龙蜥社区正式上线首个 CSV 机密容器解决方案
|
SQL 机器学习/深度学习 分布式计算
PySpark数据分析基础:PySpark基础功能及DataFrame操作基础语法详解
PySpark数据分析基础:PySpark基础功能及DataFrame操作基础语法详解
2687 0
PySpark数据分析基础:PySpark基础功能及DataFrame操作基础语法详解