Разница между .dll и .exe? - PullRequest
83 голосов
/ 31 июля 2009

Я хочу знать точную разницу между dll и exe-файлом.

Ответы [ 14 ]

119 голосов
/ 31 июля 2009

Я не знаю, почему все отвечают на этот вопрос в контексте .NET. Вопрос был общим и нигде не упоминался .NET.

Ну, основные различия:

EXE

  1. exe всегда запускается в собственном адресном пространстве, т.е. это отдельный процесс.
  2. Цель EXE-файла - запустить отдельное собственное приложение.

DLL

  1. Для запуска dll всегда нужен исполняемый файл. то есть он никогда не сможет работать в своем собственном адресном пространстве.
  2. Цель библиотеки DLL - создать коллекцию методов / классов, которые можно повторно использовать из какого-либо другого приложения.
  3. DLL - это реализация общей библиотеки Microsoft.

Формат файлов DLL и exe практически одинаков. Windows распознает разницу между DLL и EXE через PE Header в файле. Для получения дополнительной информации о PE заголовке, Вы можете посмотреть эту статью на MSDN

66 голосов
/ 31 июля 2009

EXE:

  1. Это исполняемый файл
  2. При загрузке исполняемого файла экспорт не вызывается, а только точка входа модуля.
  3. Когда система запускает новый исполняемый файл, создается новый процесс
  4. Поток ввода вызывается в контексте основного потока этого процесса.

DLL:

  1. Это библиотека динамических ссылок
  2. Есть несколько экспортируемых символов.
  3. Система загружает DLL в контексте существующего процесса.

Для получения более подробной информации: http://www.c -sharpcorner.com / Интервью / Ответ / Answer.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

27 голосов
/ 29 сентября 2009

Разница в том, что EXE имеет точку входа, "основной" метод, который будет запускаться при исполнении.

Код внутри DLL должен вызываться из другого приложения.

25 голосов
/ 24 ноября 2010

Есть еще несколько различий в структуре, о которых вы могли бы упомянуть.

  1. Как DLL, так и EXE имеют одинаковую файловую структуру - Portable Executable или PE. Чтобы провести различие между ними, можно заглянуть в Characteristics член IMAGE_FILE_HEADER внутри IMAGE_NT_HEADERS. Для библиотеки DLL включен флаг IMAGE_FILE_DLL (0x2000). Для EXE это флаг IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. PE-файлы состоят из нескольких заголовков и нескольких разделов. Обычно есть раздел для кода, раздел для данных, раздел, содержащий список импортируемых функций, и раздел для ресурсов. Некоторые разделы могут содержать более одной вещи. Заголовок также описывает список каталогов данных, которые расположены в разделах. Эти каталоги данных позволяют Windows найти то, что ей нужно в PE. Но одним из типов каталогов данных, который никогда не будет иметь EXE (если вы не создаете Frankenstein EXE), является каталог экспорта. Здесь файлы DLL имеют список функций, которые они экспортируют, и могут использоваться другими файлами EXE или DLL. С другой стороны, каждая DLL и EXE имеет каталог импорта, в котором перечислены функции и файлы DLL, необходимые для запуска.
  3. Также в заголовках PE (IMAGE_OPTIONAL_HEADER) есть элемент ImageBase. Он указывает виртуальный адрес, по которому PE предполагает, что он будет загружен. Если он загружен по другому адресу, некоторые указатели могут указывать на неправильную память. Поскольку EXE-файлы одними из первых загружаются в новое адресное пространство, загрузчик Windows может обеспечить постоянный адрес загрузки, обычно это 0x00400000. Эта роскошь не существует для DLL. Два DLL-файла, загруженные в один и тот же процесс, могут запрашивать один и тот же адрес. Вот почему у DLL есть другой каталог данных, который называется Base Relocation Directory, который обычно находится в своем собственном разделе - .reloc. Этот каталог содержит список мест в DLL, которые необходимо перебазировать / исправить, чтобы они указывали на нужную память. Большинство EXE-файлов не имеют этого каталога, но некоторые старые компиляторы генерируют их.

Вы можете прочитать больше на эту тему @ MSDN .

18 голосов
/ 31 июля 2009

Этот ответ был немного более подробным, чем я думал, но прочитал его до конца.

DLL:
В большинстве случаев файл DLL представляет собой library . Существует несколько типов библиотек, динамических и статических - читайте о разнице . DLL означает динамическая ссылка библиотека , которая говорит нам, что это часть программы, но не в целом. Он состоит из программных компонентов многократного использования ( библиотека ), которые вы можете использовать для больше, чем одна программа . Имейте в виду, что всегда можно использовать исходный код библиотеки во многих приложениях, использующих копирование-вставку, но идея библиотеки DLL / статической библиотеки состоит в том, что вы можете обновить код библиотеки и одновременно обновить все приложения, используя это - без компиляции.

Например:
Представьте, что вы создаете компонент Windows GUI , такой как Button . В большинстве случаев вы захотите повторно использовать код, который вы написали, потому что это сложный, но общий компонент - вы хотите, чтобы его использовали многие приложения, но вы не хотите давать им источник Код Вы не можете скопировать и вставить код для кнопки в каждой программе, поэтому вы решаете, что хотите создать DL-библиотеку (DLL) .

Эта "кнопка" библиотека требуется для запуска EXE cutables, и без нее они не будут работать, потому что они не знают, как создать кнопку, только как поговори с ним.

Аналогично, DLL не может быть запущена - запускается, потому что это только часть программы, но не имеет информации, необходимой для создания "процесса" .

EXE:
Исполняемый файл , программа . Он знает, как создать процесс и как общаться с DLL. Для создания кнопки требуется DLL, а без нее приложение не запускается - ОШИБКА.

надеюсь, это поможет ....

14 голосов
/ 10 января 2014

DLL и EXE являются форматами переносимых исполняемых файлов (PE)

A Динамически подключаемая библиотека (DLL) является библиотекой и поэтому не может быть выполнена напрямую. Если вы попытаетесь запустить его, вы получите ошибку об отсутствующей точке входа. Для выполнения требуется точка входа (основная функция), эта точка входа может быть любым приложением или exe. Связывание DLL происходит во время выполнения. Вот почему она называется «Динамическая ссылка».

An Исполняемый файл (EXE) - это программа, которая может быть выполнена. У него есть собственная точка входа. Флаг внутри PE-заголовка указывает, какой это тип файла (независимо от расширения файла). Заголовок PE имеет поле, в котором находится точка входа для программы. В DLL это не используется (или, по крайней мере, не как точка входа).

Существует много программного обеспечения , доступного для проверки информации заголовка. Единственная разница, заставляющая оба работать по-разному, - это бит в заголовке, как показано на диаграмме ниже.

header

EXE-файл имеет только одну основную запись, что означает, что это изолированное приложение, когда система запускает exe, создается новый процесс, в то время как библиотеки DLL имеют много точек входа, поэтому, когда приложение использует его, новый процесс не запускается, DLL можно повторно использовать и создавать версии. DLL уменьшает пространство для хранения, так как разные программы могут использовать одну и ту же DLL.

4 голосов
/ 11 сентября 2015

Dll v / s Exe

1) DLL-файл - это библиотека динамических ссылок, которую можно использовать в исполняемых файлах и другие файлы DLL.
EXE-файл представляет собой исполняемый файл, который запускается в отдельном процесс, которым управляет ОС.

2) DLL не являются непосредственно исполняемыми. Это отдельные файлы, содержащие функции, которые могут вызываться программами и другими библиотеками DLL для выполнения вычислений и функций.
EXE - это программа, которая может быть выполнена. Пример: программа Windows

3) * Повторное использование 1009 * DLL: их можно использовать для других приложений. Пока кодер знает имена и параметры функций и процедур в файле DLL.
EXE: только для определенной цели.

4) DLL будет совместно использовать тот же процесс и пространство памяти вызывающего приложения, в то время как
EXE создает отдельный процесс и пространство памяти.

5) Использует
DLL: вы хотите, чтобы многие приложения использовали его, но не хотите давать им исходный код. Вы не можете скопировать и вставить код для кнопки в каждой программе, поэтому вы решаете создать библиотеку DL (DLL) ).

EXE: когда мы работаем с шаблонами проектов, такими как приложения Windows Forms, консольные приложения, приложения WPF и службы Windows, они создают сборку exe при компиляции.

6) Сходства:
Как DLL, так и EXE являются двоичными файлами, имеют сложную вложенную структуру, определяемую форматом Portable Executable, и они не предназначены для редактирования пользователями.

3 голосов
/ 25 августа 2011

Две вещи: расширение и флаг заголовка, хранящиеся в файле.

Оба файла являются файлами PE. Оба содержат одинаковый макет. DLL является библиотекой и поэтому не может быть выполнена. Если вы попытаетесь запустить его, вы получите ошибку об отсутствующей точке входа. EXE - это программа, которая может быть выполнена. У него есть точка входа. Флаг внутри PE-заголовка указывает, к какому типу файла это относится (независимо от расширения файла). Заголовок PE имеет поле, в котором находится точка входа для программы. В DLL это не используется (или, по крайней мере, не как точка входа).

Одно небольшое отличие состоит в том, что в большинстве случаев DLL имеют раздел экспорта, в который экспортируются символы. EXE-файлы никогда не должны иметь раздел экспорта, поскольку они не являются библиотеками, но ничто не препятствует этому. Загрузчику Win32 все равно.

Кроме того, они идентичны. Итак, в итоге, EXE - это исполняемые программы, в то время как DLL - это библиотеки, загружаемые в процесс и содержащие некоторые полезные функции, такие как безопасность, доступ к базе данных или что-то еще.

2 голосов
/ 31 июля 2009

EXE-файл виден системе как обычный исполняемый файл Win32. Его запись точка относится к небольшому загрузчику, который инициализирует среду выполнения .NET и сообщает это загрузить и выполнить сборку, содержащуюся в EXE. DLL видима для системы как Win32 DLL, но, скорее всего, без каких-либо точки входа .NET Runtime хранит информацию о содержании сборка в собственном заголовке.

dll - это коллекция многоразового использования функции где .exe является исполняемый файл, который может вызвать эти Функции

1 голос
/ 31 мая 2016

● .exe и dll - это скомпилированная версия кода C #, которая также называется сборки.

● .exe - это отдельный исполняемый файл, что означает, что он может выполняться напрямую.

● .dll - это компонент многократного использования, который не может быть выполнен напрямую и требует другие программы для его выполнения.

...