可执行程序:
DLL:
欲了解更多详情, 请 访问 : http : //www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL
参考: http : //www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
我不知道为什么每个人都在.NET上下文中回答这个问题。 这个问题是一个普遍的问题,并没有提到.NET的任何地方。
那么,主要的区别是:
可执行程序
DLL
DLL和exe的文件格式基本相同。 Windows通过文件中的PE Header识别DLL和EXE之间的区别。 有关PE标题的详细信息, 可以查看MSDN上的这篇文章
不同之处在于EXE有一个入口点,一个“main”方法将在执行时运行。
DLL中的代码需要从另一个应用程序调用。
关于你可以提到的结构还有一些不同之处。
IMAGE_NT_HEADERS
查找IMAGE_FILE_HEADER
的Characteristics
成员。 对于DLL,它具有IMAGE_FILE_DLL
(0x2000)标志打开。 对于EXE,它是IMAGE_FILE_EXECUTABLE_IMAGE
(0x2)标志。 IMAGE_OPTIONAL_HEADER
)是ImageBase
成员。 它指定了PE假定它将被加载的虚拟地址。 如果它被加载到另一个地址,一些指针可能指向错误的内存。 由于EXE文件是第一个加载到新的地址空间中的,Windows加载器可以保证一个恒定的加载地址,通常是0x00400000。 这种奢侈品不存在于DLL中。 加载到同一进程中的两个DLL文件可以请求相同的地址。 这就是为什么一个DLL有另一个数据目录称为基本重定位目录,通常驻留在它自己的部分 – .reloc
。 这个目录包含了需要重新绑定/打补丁的DLL中的位置列表,以便它们指向正确的内存。 大多数EXE文件没有这个目录,但是一些旧的编译器确实生成了它们。 你可以阅读更多关于这个主题@ MSDN 。
这个答案比我想象的要详细一些,但是通读一遍。
DLL:
在大多数情况下,DLL文件是一个库 。 有几种类型的库,动态和静态 – 阅读有关的差异 。 DLL代表动态链接库 ,它告诉我们这是程序的一部分 ,但不是全部。 它由可重复使用的软件组件( 库 )组成,您可以将其用于多个单独的程序 。 请记住,在许多使用复制粘贴的应用程序中始终可以使用库源代码,但是DLL /静态库的想法是可以更新库的代码,并同时更新所有应用程序它 – 没有编译。
例如:
想象一下,你正在创建一个像GUI一样的Windows GUI组件 。 在大多数情况下,您希望重复使用您编写的代码,因为它是一个复杂但常见的组件 – 您希望许多应用程序使用它,但不希望给它们源代码您不能复制- 为每个程序中的按钮添加代码,因此您决定创建一个DL-Library(DLL) 。
这个“按钮”库是EXE cutables运行所必需的,没有它,它们将不会运行,因为他们不知道如何创建按钮,只是如何与它交谈。
同样,一个DLL不能执行 – 运行,因为它只是程序的一部分,但没有创建“进程”所需的信息。
可执行程序:
一个可执行文件是程序 。 它知道如何创建一个进程,以及如何与DLL交谈。 它需要 DLL来创建一个按钮,没有它的应用程序不会运行 – 错误。
希望这可以帮助….
DLL和EXE都是可移植可执行(PE)格式
动态链接库(DLL)是一个库,因此不能直接执行。 如果你尝试运行它,你会得到关于缺少入口点的错误。 它需要一个入口点(main函数)来执行,入口点可以是任何应用程序或exe。 DLL绑定发生在运行时。 这就是为什么它被称为“动态链接”库。
Executable(EXE)是一个可执行的程序。 它有自己的切入点。 PE头中的一个标志表示它是哪种类型的文件(与文件扩展名无关)。 PE标题有一个字段,该程序的入口点位于该字段中。 在DLL中,它不被使用(或者至少不作为入口点)。
有许多软件可以检查标题信息。 导致两者工作不同的唯一区别是标题中的位,如下图所示。
EXE文件只有一个主要的入口,意味着它是隔离的应用程序,当系统启动exe时,创建一个新的进程,而DLL有许多入口点,所以当应用程序使用它时,没有新的进程启动,DLL可以被重用和版本化。 DLL减少了存储空间,因为不同的程序可以使用相同的DLL。
有两件事:扩展名和标题存储在文件中。
这两个文件都是PE文件。 两者都包含完全相同的布局。 DLL是一个库,因此不能执行。 如果你尝试运行它,你会得到一个关于缺少入口点的错误。 EXE是一个可以执行的程序。 它有一个入口点。 PE标头内的一个标志表示它是哪种文件类型(与文件扩展名无关)。 PE标题有一个字段,该程序的入口点位于该字段中。 在DLL中,它不被使用(或者至少不作为入口点)。
一个微小的区别是,在大多数情况下DLL有一个导出部分的符号导出。 EXEs不应该有一个出口部分,因为他们不是图书馆,但没有阻止这种情况发生。 Win32加载器不关心任何方式。
除此之外,它们是相同的。 因此,总而言之,EXE是可执行程序,而DLL被加载到一个进程中,并包含一些有用的功能,比如安全性,数据库访问等等。
EXE对于系统来说是一个普通的Win32可执行文件。 它的入口点是指一个小的装载器,它初始化.NET运行时并告诉它加载和执行EXE中包含的程序集。 系统可以将DLL看作Win32 DLL,但很可能没有任何入口点。 .NET运行时将关于包含的程序集的信息存储在它自己的头文件中。
DLL是一个可重复使用的函数的集合,作为一个.exe是一个可执行文件,可以调用这些函数
DLL V / S EXE
1)DLL文件是一个可以在exe文件和其他dll文件中使用的动态链接库。
EXE文件是一个可执行文件,运行在由OS管理的独立进程中。
2)DLL不能直接执行。 它们是单独的文件,包含可以由程序和其他DLL来执行计算和功能的函数。
EXE是一个可以执行的程序。 例如:Windows程序
3)可重用性
DLL:它们可以重用于其他应用程序。 只要编码器知道DLL文件中的函数和过程的名称和参数。
EXE:仅用于特定目的。
4)一个DLL将共享相同的进程和调用应用程序的内存空间,而一个
EXE创建其独立的进程和内存空间。
5)用途
DLL:你想让许多应用程序使用它,但你不想给他们源代码你不能复制粘贴在每个程序中的按钮代码,所以你决定要创建一个DL-Library(DLL )。
EXE:当我们使用像Windows窗体应用程序,控制台应用程序,WPF应用程序和Windows服务这样的项目模板时,它们在编译时生成一个exe程序集。
6)相似之处:
DLL和EXE都是二进制文件,具有由便携式可执行文件格式定义的复杂嵌套结构,并且不打算由用户编辑。
一个exe是一个可执行的程序,而一个DLL是一个可以被程序动态加载和执行的文件。
.exe是程序。 .dll是.exe(或其他.dll)可能调用的库。
什么sakthivignesh说可以是真实的在一个.exe可以使用另一个,就好像它是一个库,这是用一些COM组件完成(例如)。 在这种情况下,“slave”.exe是一个单独的程序(严格来说,是一个单独的进程 – 也许运行在一个单独的机器上),但是接受并处理来自其他程序/组件/任何请求的程序。
但是,如果您只是从程序文件的文件夹中选择一个随机的.exe和.dll文件,则可能是COM不相关 – 它们只是一个程序及其动态链接库。
使用Win32 API,程序可以使用LoadLibrary和GetProcAddress API函数IIRC加载和使用DLL。 Win16中有类似的功能。
COM在很多方面都是DLL概念的演变,最初是作为OLE2的基础而进行的,而.NET是COM的后代。 从Windows 1,IIRC开始,DLL就已经存在了。 它们最初是一种在多个正在运行的程序之间共享二进制代码(特别是系统API)的方式,以最大限度地减少内存使用。
DLL和EXE之间的主要确切的区别DLL没有入口点和EXE。 如果你熟悉c ++,你可以看到构建EXE有main()入口函数,而DLL没有
●.exe和dll是C#代码的编译版本,也称为程序集。
●.exe是一个独立的可执行文件,这意味着它可以直接执行。
●.dll是一个不能直接执行的可重用组件,需要其他程序来执行。