DLL(Dynamic Link Library)文件为动态链接库文件,又称为"应用程序拓展",是软件文件类型。在windows中,许多应用程序并不是一个完整的可执行文件,它们被分割为一些相对独立的动态链接库,即DLL文件,放置于系统之中。当我们执行某个程序时,相应的DLL文件就会被调用。一个程序可以使用多个DLL文件,一个DLL文件也可以被多个程序使用,因此DLL文件又被称为共享DLL文件(来源:百度百科)

意义

DLL文件中存放的是各类程序的函数实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。使用DLL文件的好处在于不需要再运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积

作用

动态链接库是早期windows系统由于受限于当时计算机内存空间较小的问题而出现的一种内存优化的方法。当一段相同的子程序被多个程序调用时,为了减少内存消耗,可以将这段子程序存储为一个可执行文件,当多个程序调用时只在内存中生成和使用同一个实例,这有助于促进代码重用和内存的有效使用

DLL文件的分类

  • ActiveX控件文件(.ocx):如window上的日历控件
  • 控制面板文件(.cpl):控制面板上的每一项都是一个专用的DLL
  • 设备驱动文件(.drv):如控制打印到打印机的驱动程序

windows下的DLL文件和linux下的.so文件

共同优点(动态链接库的优点):

  • 节省内存和磁盘空间,因为动态库在内存中只保存一份,便可供多个进程或者程序使用
  • 模块化编程,方便协作,但优点是较静态链接库更加灵活
  • 使用动态加载DLL和SO文件时,便于模块升级,无需重新编译或链接整个程序,只需升级指定部分即可

windows下的静态库生成的是.lib文件,其中包含了函数和数据的实体,链接时整合到程序中,而windows下的动态链接库则生成一个.DLL文件并导出一个lib文件(动态.lib文件),该文件相当于一个h文件,它是对实现部分(.DLL)的导出部分的声明编译到宿主程序中,运行时需要相应的.DLL文件的支持,否则无法正常工作

动态库的两种使用方法:动态链接和动态加载

动态链接:链接时将动态库导出的.lib文件链接到可执行文件中去

动态加载:在程序运行过程中及时的将需要的库加载到内存中,通过相应的API拿到需要使用的动态库函数接口地址,使用函数指针的方式使用,使用完之后动态的卸载动态库

两种方式的对比:

  • 动态链接方式需要函数、便量的声明(c/c++中的头文件),并且使用.lib来"欺骗"静态链接器;动态加载方式没有函数声明,使用函数时采取函数指针的方式
  • 动态链接方式需要系统来维护动态库的加载与卸载;动态加载方式需要程序员自己解决加载和卸载问题
  • 动态链接方式在发布新的DLL时,要用对应的lib文件重新链接程序;动态加载方式不需要,只需替换掉原来的DLL

linux的共享库和windows的动态库本质相同,特别是在动态加载时;

如果在使用动态链接的方式,则需要在.so拿来链接时使用,不过它不会真的将文件链接进最终的可执行文件,只是记录下依赖的.so文件,并将引用于该.so的函数等符号记录,让程序动态的加载到内存空间(使用地址跳转)

参考链接:https://www.cnblogs.com/darling131499/p/4609097.html

windows下的.DLL文件相关推荐

  1. windows下系统dll文件大全

    aclui.dll .....Security Descriptor Editor,没有它,注册表编缉器会无法运行 ACTIVEDS.DLL .....(ADs 路由层 DLL). 没有它, 打开事件 ...

  2. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...

  3. windows下编写dll

    dll的优点 简单的说,dll有以下几个优点: 1) 节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中.如果 ...

  4. Windows 下目录及文件向Linux同步

    本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...

  5. 移动项目开发笔记(管理不同解决方案下的DLL文件相互引用之心得体会)

    当项目比较庞大时候Dll文件的管理显得就尤其重要了,比如多个解决方案有不同项目之间的引用,如果引用的路径都指向某项目bin下的dll文件的话,dll维护起来很不方面,因此遇到这种情况的话该怎么更好的管 ...

  6. windows下批处理删除文件及注册表项

    1.windows下批处理删除注册表项 假如我要清除WinRAR的历史记录,可以新建个批处理文件, 然后在里面加入如下文字: reg delete HKEY_CURRENT_USER/Software ...

  7. windows下批处理删除文件夹、删除文件、if exist用法

    windows下批处理删除文件夹.删除文件.if exist用法 开发中用到Window批处理del.rd.if exist,总结用法便于后续使用. windows下批处理删除文件: * 使用del指 ...

  8. 在windows下看linux文件-Explore2fs(转)

    在windows下看linux文件-Explore2fs(转)[@more@]Explore2fs 1.00 pre 6b 你曾经在Linux操作系统下载了很多文件,但是当你重新开启在Windows9 ...

  9. 系统运维系列 之在Windows下可以查看文件夹大小的工具TreeSize Free

    给大家推荐一个在Windows下可以查看文件夹大小的工具TreeSize Free. 下载链接: https://customers.jam-software.de/downloadTrial.php ...

最新文章

  1. vue----常用实例方法--$mount(),$destroy(),$watch(),$forceUpdate()
  2. 二叉查找树的插入,删除,查找
  3. PHP 安装xdebug
  4. jupyter notebook代码自动完成功能
  5. 开源操作系统年度技术会议图文直播
  6. SVProgressHUD的使用
  7. Python3 - 苹果ID登录App Sign in with Apple
  8. 存:科幻推荐书单---超经典科幻必读
  9. Vue 不睡觉教程3 - 来点实在的:自动计算剩余时间的任务列表
  10. VxVM Volume Snapshot Issue -- 卷快照删除失败示例一
  11. 利用canvas和vue_qrcodes生成带二维码头像的海报(一)
  12. selenium设置浏览器的大小和位置
  13. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(8)之文章管理
  14. Ubuntu16.04、Ubuntu18.04、Ubuntu20.04分区方案
  15. 《MapReduce: Simplified Data Processing on Large Clusters》译文
  16. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 167: illegal multibyte sequence
  17. 低通,高通,带通,带阻滤波器
  18. idea搭建bpm环境
  19. B2B常见名词以及英文缩写
  20. ANSYS apdl命令流案例1--------桁架桥梁结构分析

热门文章

  1. feign调用的重试机制,如何关闭
  2. ubt搭建rabbitMQ消息队列
  3. 283移动零之Leecode—数组篇(双指针)
  4. 百度地图Polyline实现多颜色绘制
  5. 徐直军:今年至少3亿设备用上鸿蒙,互联网又一领域暗藏“金矿“
  6. css亮黄色_写给前端工程师的色彩常识:色彩三属性及其在CSS中的应用
  7. 数论-模运算与同余的性质
  8. 学习-Java字符串之字符串、字符数组与字节数组间的使用之单词重新排序
  9. js获取浏览器和设备相关宽度和高度
  10. 一个让人看了心酸、落泪的故事