`
dengzhangtao
  • 浏览: 670809 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

什么是动态链接库?

c++ 
阅读更多
一、动态链接库的概念
  动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。

  动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。

  一般情况下,如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射文件实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程地址空间。在Win32系统中,每个进程拥有自己的32位线性地址空间,如果一个DLL被多个进程调用,每个进程都会收到该DLL的一份映像。与16位Windows不同,在Win32中DLL可以看作是每个进程自己的代码。

  二、动态链接库的优点

  1. 共享代码、资源和数据

   使用DLL的主要目的就是为了共享代码,DLL的代码可以被所有的Windows应用程序共享。

  2. 隐藏实现的细节

   DLL中的例程可以被应用程序访问,而应用程序并不知道这些例程的细节。

  3. 拓展开发工具如Delphi的功能

  由于DLL是与语言无关的,因此可以创建一个DLL,被C++、VB或任何支持动态链接库的语言调用。这样如果一种语言存在不足,就可以通过访问另一种语言创建的DLL来弥补。

  三、动态链接库的实现方法

  1. Load-time Dynamic Linking

  这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中,其主要目的是便于代码共享。

  2. Run-time Dynamic Linking

  这种方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪个函数,并用LoadLibrary和GetProcAddress动态获得DLL函数的入口地址。



教你认识动态链接库DLL文件


  DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:WindowsSystem目录下。


  1、如何了解某应用程序使用哪些DLL文件

  右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL文件的情况。

  2、如何知道DLL文件被几个程序使用

  运行Regedit,进入HKEY_LOCAL_MACHINESoftwareMicrosrftWindowsCurrent-
VersionSharedDlls子键查看,其右边窗口中就显示了所有DLL文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程序使用,(2)表示被两个程序使用,(0)则表示无程序使用,可以将其删除。

  3、如何解决DLL文件丢失的情况

  有时在卸载文件时会提醒你删除某个DLL文件可能会影响其他应用程序的运行。所以当你卸载软件时,就有可能误删共享的DLL文件。一旦出现了丢失DLL文件的情况,如果你能确定其名称,可以在Sysbckup(系统备份文件夹)中找到该DLL文件,将其复制到System文件夹中。如果这样不行,在电脑启动时又总是出现“***dll文件丢失……”的提示框,你可以在“开始/运行”中运行Msconfig,进入系统配置实用程序对话框以后,单击选择“System.ini”标签,找出提示丢失的DLL文件,使其不被选中,这样开机时就不会出现错误提示了。
0
0
分享到:
评论

相关推荐

    系统程序设计:动态链接库程序设计

    1.创建一个动态链接库,在该动态链接库中添加一个函数,该函数可以输出如图所示的图形; 2.在上面创建的动态链接库中添加导出类,并把绘制图形的函数添加到该类下; 3.创建一个动态链接库,在该动态链接库中添加一个...

    linux动态链接库的开发实例

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为后缀)是一种重要的编程资源,它允许多个程序共享同一份代码,从而节省内存并方便代码维护。本教程将通过一个实例深入探讨Linux下C/C++语言如何...

    Visual C++动态链接库

    Visual C++ 动态链接库是指在 Visual C++ 环境下开发和使用的动态链接库,动态链接库是一种共享代码的方式,可以提供给开发者一些可以直接使用的变量、函数或类。下面是对 Visual C++ 动态链接库的详细介绍。 首先...

    动态链接库dll学习教程

    学习动态链接库需要什么样的基础知识? 如果你掌握了 C,并大致掌握了 C++,了解一点 MFC 的知识,就可以轻松地看懂本文。 动态链接库的编程 VC++动态链接库编程之基础概念通过学习动态链接库的基础概念、分类、...

    C# dll的调用(动态链接库创建与使用)

    在编程世界中,动态链接库(DLL,Dynamic Link Library)是一种重要的共享代码资源,它可以被多个应用程序同时调用,以节省内存并实现代码重用。C# 作为.NET框架的一部分,同样支持创建和调用DLL。本文将深入探讨C#...

    动态链接库实验报告.pdf

    动态链接库实验报告

    Fortran语言的动态链接库的开发及应用

    Fortran 语言的动态链接库的开发及应用是指利用 Fortran 语言编译成动态链接库,然后在其他语言环境中调用该动态链接库,以解决 Fortran 语言在图形界面、可视计算、面对对象、事件驱动、数据库应用等方面的局限性。...

    pb动态链接库,经典,好用

    PB动态链接库(PB是PowerBuilder的缩写)是指由PowerBuilder开发的动态链接库文件。PowerBuilder是一款强大的、基于事件驱动的可视化编程工具,主要用于构建数据库应用系统。它以其易用性、高效的数据库访问能力和...

    VC++写动态链接库教程

    先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以...静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

    动态链接库辅助支持库

    动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中的一种共享库机制,它允许多个应用程序同时使用同一段代码,从而节省内存并提高系统效率。动态链接库辅助支持库则是为了帮助开发者更方便地管理和...

    如何制作动态链接库,动态链接库的制作。

    介绍如何制作动态链接库 动态链接库的优点 制作过程 调用方法等。

    动态链接库的例子

    动态链接库(DLL,Dynamic Link Library)是Windows操作系统中一种重要的共享代码机制,它允许多个程序同时使用同一段代码,从而节省内存并提高系统效率。VC++是Microsoft开发的C++编译器,广泛用于Windows平台上的...

    windows动态链接库.rar

    Dynamic Link Library,即动态链接库,是Microsoft在Windows操作系统中实现共享函数库概念的一种实现方式,这种库包含了可由多个程序同时使用的代码和数据 它其中windows中 一些作为DLL实现的文件有:ActiveX控件(....

    GmSSL动态链接库

    Windows10编译出来的GmSSL动态链接库,可以在windows系统中通过java调用。编译过程可以参考 https://blog.csdn.net/liuxing9345/article/details/110742166

    opengl动态链接库

    OpenGL动态链接库是计算机图形学领域中不可或缺的一部分,它为开发者提供了一套强大的接口,用于在各种操作系统上创建复杂的3D图形和2D图形。OpenGL(Open Graphics Library)是一种跨语言、跨平台的应用程序编程...

    单片机动态链接库demo_发布版v1版

    单片机动态链接库(Dynamic Link Library,DLL)是一种在嵌入式系统中实现代码复用和节省存储空间的技术。在传统的计算机系统中,DLL主要应用于Windows操作系统,而在单片机环境中,它同样能帮助我们优化资源利用,...

    动态链接库大总结.rar动态链接库大总结.rar

    动态链接库(DLL,Dynamic Link Library)是Windows操作系统中一种重要的共享代码库,它封装了各种函数和资源,可供多个程序同时调用,从而节省内存并提高系统效率。本总结将深入探讨DLL的工作原理、作用、优缺点...

    静态加载动态链接库

    在计算机编程领域,动态链接库(Dynamic Link Library, DLL)是一种共享代码的机制,它允许多个程序同时使用同一份代码,以节省内存并方便代码更新。静态加载动态链接库是与运行时动态加载相对的一种方式,它在编译...

    串口通讯动态链接库资料

    串口通讯动态链接库资料是一份集合了关于API编程、MFC动态链接库(DLL)应用及串口通信技术的资源。在这个包中,我们有四份文件:`VC++动态链接库(dll)编程深入浅出.pdf`,`串口通讯.txt`,`串口 api.txt`以及`rs ...

    动态链接库(DLL)编程深入浅出

    1.概述  先来阐述一下DLL(Dynamic Linkable Library)的概念...静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

Global site tag (gtag.js) - Google Analytics