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

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

👑DLL文件概念

先来看一段话:

 DLL是Dynamic 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文件的!



DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等)

DLL中的代码是以API函数`形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能


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


Windows中有3个非常重要的底层DLL:Kernel32.dll、User32.dll、GDI32.dll。

其中Kernel32.dll顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数;

而User32.dll中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;

GDI32.dll的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。

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

image.png

🎪为什么要用DLL?

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


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


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


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


可以更好地扩展应用程序

由于DLL能被应用程序动态载入内存。所以,应用程序可以在需要时才将DLL载入到内存中,这让程序的可维护性变得很高。

比如我们在修改应用程序的某一块功能时,可以只针对这块功能对应的DLL文件中的内容,而不必全局修改代码

便于不同领域的程序员之间合作

目前可以用的编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢?

这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。

节省内存

如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。大概意思就是可以将一些通用的模块功能封装起来,这样大家都可以调用,而避免性能的浪费!

更好的解决应用程序本地化问题

在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。

这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。

💬总结

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


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


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


相关文章
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
4月前
|
PHP 数据库 数据安全/隐私保护
Unity数据加密☀️ 三、加密DLL供Unity使用
Unity数据加密☀️ 三、加密DLL供Unity使用
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
6月前
|
JavaScript 前端开发 C#
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
401 0
|
6月前
|
存储 缓存 开发工具
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
1644 0
|
7月前
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
87 0
|
7月前
|
XML 存储 安全
Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)
Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)
|
7月前
|
存储 JSON C#
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
|
7月前
|
存储 XML JSON
Unity 数据读取|(三)ini文件解析(INIParser,StreamReader,System.Runtime.InteropServices)
Unity 数据读取|(三)ini文件解析(INIParser,StreamReader,System.Runtime.InteropServices)
|
7月前
|
存储 JSON C#
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
293 0