什么是DLL呢?

2021-05-07 17:43发布

12条回答
茄子酱
2楼 · 2021-05-08 11:40

DLL(动态连接库),既然是动态,那么就是有静态连接库,我想如果这么说大家

会更明白:
也许有的人在DOS下编写过程序都明白这么一件事情,我写了一个程序,里面有一

个功能就是把屏幕的内容翻转在转90°打印出来,那么我需要把整个程序写好放

到我的所有代码中,但是如果我写另外一个程序的时候也有相通的功能,我可以

调用以前的程序这个功能吗?当然是不可以的了,所以我就要重新的写一次,如

果有5个需要调用这个功能的程序,我的这个功能函数需要20K的地方,那么我的

硬盘就有80K的垃圾出现(20k*5 - 20k),这仅仅是一个函数,大家是否可以数

清除WINDOWS如果这样来写,需要多少函数吗?你看看所有的按钮、滚动条、

Listbox\Textbox\checkBox\窗体、打印对话框、颜色对话框、打开、保存、另存

、字体对话框、文件的排列、拷贝、粘贴...... 这一切的一切是不是都需要在所

有的程序中都要写出来呢?如果真的是这个样子,那么我们的windows应该按TB来

计算了(1TB=1024GB),也许你说你的硬盘很大,那么他们还要在运行的时候占

用相同大下的内容呢!所以发展出来了,动态连接库(dll)这个感念:

动态连接,就是把这些相通的功能、函数都放到一种特殊形式的windwos可执行文

件中(dll),生成一个DLL的时候,程序员需要写出,其中包含那些函数需由其

他程序来访问。这个过程叫做对函数的“导出”
创建windows程序的时候,专门的连接程序对程序的对象文件进行扫描,并生成一

个列表,列出那些调用的函数在那个DLL那个位置,指定各个函数所在位置的过程

叫做对函数的“导入”,当程序运行的时候,一旦要求用到执行文件内部没有的

函数,windows就会自动装载动态连接库,使应用程序可以访问这些函数。此时,

每个函数的地址都会解析出来,并且以动态的方式连接到程序里--这便是术语

“动态连接”的由来。
另外还有一个好处,就是当你更新你的这个函数的版本和功能的时候,静态连接

所需要做的工作是多少(假设按windwos来说他有上千个这样的函数,一共有100

多个程序来使用,那静态连接需要100000次的更新,动态连接只需要1000次)
,从而也节省了内存的空间。
动态连接库不一定是DLL扩展名的,也可以是ocx、vbx、exe、drv 等等的
大家可以发现在调用WIN32 api的时候里面都会有说明是来自于那个dll等宿主文

件的
现在我就在这里讲讲一些标准的dll用途:
看下面这个API声明:
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias

"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)

As Long
看见kernel32了吗,其实这个就是kernel32.dll的名字,你可以在你的硬盘里找

到他,这就是说GetWindowsDirectory这个函数是在kernel32.dll里面,他的别名

是GetWindowsDirectoryA,()中是他的参数,有两个一个是字符型,一个是长

整型,返回值也是长整型。lpBuffer ------- String,指定一个字串缓冲区,

用于装载Windows目录名。除非是根目录,否则目录中不会有一个中止用的“\”

字符nSize ---------- Long,lpBuffer字串的最大长度,返回值 为Long,复制

到lpBuffer的一个字串的长度。如lpBuffer不够大,不能容下整个字串,就会返

回lpBuffer要求的长度。零表示失败。
这就是API声明的意义所在!
DLL的说明
KERNEL32.DLL ---- 低级内核函数。使用他可以完成内存管理、任务管理、

资源控制等。
USER32.DLL------于windows管理有关的函数。消息、菜单、光标、计时器

、通信和其他大多数非现实函数都可以从这里找到
GDI32.DLL-------图形设备接口库。于设备输出有关的函数:大多数绘图

、显示场景、图元文件、坐标及其字体函数都可以从这梨找到。
COMDLG32.DLL\LZ32.DLL\VERSION.DLL\---这都是提供一些附加函数的库,包

括通用对话框、文件压缩、版本控制的支持。

COMCTL32.DLL --------一个新的windows控件集合,比如TreeView和RichTextBox

等等,最初这个好像是为了win95而制作的,但是现在也使用与NT下
MAPI32.DLL---------提供了一套电子邮件的专用函数
NETAPI32.DLL--------提供了一套访问和控制网络的函数
ODBC32.DLL--------(不用我再说了吧)ODBC功能的DLL之一
WINMM.DLL------(这可不是WINDOWS的MM)是多媒体控制访问函数集合

windows api正在快速发展和变化,是你我任何单个人都追赶不上的速度发展,幸

运的是我们不用掌握所有的windows API,只是掌握需要经常使用的WINDOWs api

和他的常规结构、基本感念就可以了,这亮点很重要。

三岁奶猫
3楼 · 2021-05-08 14:58

DLL(Dynamic Link Library)文件即库文件,是动态链接库文件,又称“应用程序拓展”,是软件文件类型。

在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。


aijingda
4楼 · 2021-05-08 18:26

DLL文件即动态链接库文件(Dynamic Link Library),是Windows系统中封装代码和数据以及实现资源共享的一种方式,当然本质上它就是一个已经编译好的机器指令文件。

动态链接,指的是程序运行时,有需要才去调用某个DLL。

库,指的是一般一个DLL里会包含各种函数并对外提供API。

一般就和开发中自定义的模块类似,可以将DLL通俗理解为具有某些功能的箱子,箱子里存放着已经编写好的逻辑代码和数据,箱子上有一些按钮,这就是API,外部程序调用API就好像按这些按钮一样,不需要知道箱子内部逻辑是怎么实现的,只需要阅读一些说明书之类的东西,就可以“把玩”这个箱子——也就是DLL了。

靓猴一枚
5楼 · 2021-05-08 19:14

DLL文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。


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


梵梵
6楼 · 2021-05-09 14:52

DLL文件即动态链接库文件(Dynamic Link Library),是Windows系统中封装代码和数据以及实现资源共享的一种方式,当然本质上它就是一个已经编译好的机器指令文件。

猫的想法不敢猜
7楼 · 2021-05-10 08:09

动态链接库(英语:Dynamic-link library,缩写为DLL)是微软公司在微软视窗操作系统中实现共享函数库概念的一种实现方式。这些库函数的扩展名是.DLL、.OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。

yjh
8楼 · 2021-05-10 09:53

dll是动态链接库,是微软公司在微软视窗操作系统中实现共享函数库概念的一种实现方式,这些库函数的扩展名,等同于32位视窗的可移植执行文件和16位视窗的NewExecutabl

Transform
9楼 · 2021-05-11 11:03

动态链接库(Dynamic-Link Library),简称DLL,是基于Windows程序设计的一个非常重要的组成部分。

使用DLL有许多优点:(1)使用DLL的动态连接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,节省了内存开销。(2)DLL是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,扩大了库文件的使用范围。(3)对于一个大型的、不断更新的应用程序,可以将许多重复的功能写成DLL,用主程序调用,这样既减少了开发的工作量,又提高了访问速度。。(5)DLL独立于编程语言,大多数WINDOWS编程环境都允许主程序调用DLL中的函数。

相关问题推荐

  • 回答 6

    第一步:对着Assets点击右键,选择ExportPackage第二步:选择场景文件以及和场景相关的资源或者素材,然后点击Export第三步:给导出的资源取名,并且选择要保存的位置即可

  • 回答 87
    已采纳

    玩游戏玩的很好,说明你对于游戏里面的规则、剧情设置还是比较了解的,对于从事游戏相关岗位来说也是优势之一。但是学习游戏开发还是要对游戏开发的工作内容做进一步的了解,游戏开发涉及代码较多,可以通过进一步的了解,判断自己是否适合学习这个方向,另外...

  • 回答 11

    游戏开发入门不难。后期发展需要你有丰富的奇思妙想。游戏开发肯定是培训好,自学学得不系统,并且不易发现自身薄弱之处。游戏开发的学习时长还是要看你自己对知识与技术的掌握能力,一般来说,游戏开发的学习时长大约在五个月左右。...

  • 回答 18

    个人觉得如果有一定的技术基础的话还是可以考虑自学,如果零基础的话可能会有些难度

  • 回答 10

    问题还是出在粒子的sorting fudge。在unity的2d模式下,游戏本身的背景相当于是sorting fudge的0,当你把粒子的sorting fudge设为0以上的时候,粒子就都会被背景盖住。所以在3d模式下给alpha正值来给add垫底的话,到了2d模式下就会通通不显示。所以遇上这样的...

  • 回答 17

    虚幻4引擎,你会看到和平精英加载页面左下角有这个图标。

  • 回答 8
    已采纳

    转载知乎上的两位答友的回答,各有道理。作者:风小锐链接:https://www.zhihu.com/question/322249959/answer/675883379来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。未来Unity有可能出现3A大作吗? 有可能。基于Unity已...

  • 回答 11

    在Assets文件夹里面.点击右键Create/Material即可以创建材质球

  • 回答 23

    可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...

  • 回答 18

    粒子系统由粒子发射器、粒子动画器和粒子渲染器三部分组成,主要用于游戏场景中一些特殊效果,如水、烟火等等

  • 回答 18

    首先,Python开发游戏非常尴尬,原因是没有好用的游戏开发库。Python开发游戏仅推荐PyGame,PyGame是对多年以前很流行的游戏开发库——SDL的封装。但是说实话功能太简陋了,做个动画都得考虑刷新的问题。楼主要做简单小游戏,只需要画一两周熟悉Unity引擎,然...

  • 回答 9

    1.标记水体碰撞的位置2.计算水波的传递 通过波动公式,3D或者2D 波动公式都行3.水面顶点采样波动传递结果计算结果做顶点Y轴偏移

  • 回答 15

    Unity3D中两种阴影的实现传统的ShadowMapShadowMap说起来十分简单,把摄像机和光源的位置重叠,那么场景中该光源的阴影区域就是那些摄像机看不到的地方,主要应用在前向渲染路径中。具体实现分以下几个步骤:如果有平行光开启了阴影,Unity就会为该光源计算它...

  • 回答 18

    Doozy UI是Unity UI视图层的框架,本身使用的还是UGUI的组件,但提供了一套强大的UI管理功能,可以很方便的实现一些炫酷效果,方便的UI系统管理与事件传递机制。

  • 回答 12

    Unity3d更好,因为U3D占有的市场更大,目前cocos大都是用来开发棋牌游戏的,在这方面它有着巨大的优势。而Unity3d既可以用来开发大型3D游戏,也可以用来开发vr游戏、vr应用,这是比较不错的,未来有着巨大的前景。另外ue4也是个不错的选择,近年来用ue4开发的...

  • 回答 11

    当Unity 需要做热更新的时候(2013年开始),而普通的C#又做不到的时候,而对于游戏行业来说Lua脚本热更新已经是很成熟的方案,自然Lua 热更新就成为了Unity热更新的首选。

没有解决我的问题,去提问