Unity与 DLL文件 ☀️| 什么是DLL✨?

2021-09-06 14:34:02 浏览数 (1)

前言
  • 在之前的文章有介绍过so文件,那本篇文章就来介绍一些DLL文件吧!
  • 提起DLL文件,大家肯定不会陌生,就算自己没编写生成过DLL文件,那也一定见过!
  • Windows系统打开电脑C盘的System文件夹,往下一拉就会发现有超级多的带有.dll后缀的文件!
  • DLL文件到底是个怎样的存在呢?本篇文章就来好好研究一下这个DLL文件究竟是个啥!

DLL文件概念

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

那看到这可能有小伙伴就会疑惑了,动态链接库咋这么眼熟呢,之前介绍so文件的时候也是说的动态链接库!

确实,DLL文件 也称作 动态链接库,那他俩到底有啥区别呢?亲,这边建议百度百科看一下呢(百度也搜不出啥道道来~)

我在查找了一些资料后发现,so 和 dll 都被称作 动态链接库 没错,甚至在Unity中调用他俩的方式都可以是一样的!

我理解的他俩区别可能是:DLL文件是Windows系统下常用的!so文件实际是偏向于Linux系统较多!

具体更详细的区别可能就偏多与底层了,在这里也不做过多的介绍了。接着往下说DLL文件!

比如我在自己电脑的C盘文件夹下就可以看到好多的DLL文件

基本上可以这么说,Windows系统是离不开DLL文件的!

DLLEXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等) DLL中的代码是以API函数`形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能

在查阅资料时看到有篇文章是这样说的:

  • Windows中有3个非常重要的底层DLL:Kernel32.dll、User32.dll、GDI32.dll。
  • 其中Kernel32.dll顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数;
  • 而User32.dll中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;
  • GDI32.dll的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。

这样来看的话WindowsDLL文件确实关系密切的很,在底层代码上都有互动呢!

为什么要用DLL?

那么我们为什么要用DLL文件呢?

前面说到DLL文件就是一个个小模块的代码,其中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。

使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积。

根据自己的整理和网上查阅的资料简单整理了一下使用DLL文件的优点,一起来看一下吧

  1. 可以更好地扩展应用程序 由于DLL能被应用程序动态载入内存。所以,应用程序可以在需要时才将DLL载入到内存中,这让程序的可维护性变得很高。 比如我们在修改应用程序的某一块功能时,可以只针对这块功能对应的DLL文件中的内容,而不必全局修改代码
  2. 便于不同领域的程序员之间合作 目前可以用的编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢? 这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。
  3. 节省内存 如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。大概意思就是可以将一些通用的模块功能封装起来,这样大家都可以调用,而避免性能的浪费!
  4. 更好的解决应用程序本地化问题 在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。 这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。

总结

关于DLL文件的底层并没有介绍很深,因为博主对这方面的认知也不是很深刻,还是有自知之明的!

介绍一些关于DLL的大概知识,方便我们以后使用Unity的过程中遇到DLL文件时可以有个一知半解

那本篇文章对于DLL文件的介绍就到这里了,后面会写文章介绍怎样生成一个DLL文件和在Unity中调用DLL文件的使用!

0 人点赞