Разница между .dll и .exe?

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

+82
источник поделиться
14 ответов

EXE:

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

DLL:

  • Это динамическая библиотека ссылок.
  • Есть несколько экспортированных символов.
  • Система загружает 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

+64
источник

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

Ну, основные отличия заключаются в следующем:

EXE

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

DLL

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

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

+116
источник

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

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

+26
источник

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

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

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

+24
источник

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

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

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

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

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

EXE:
Исполняемый файл является программой. Он знает, как создать process и как поговорить с DLL. Для создания кнопки требуется DLL, и без нее приложение не запускается - ERROR.

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

+16
источник

И DLL, и EXE Portable Executable (PE) форматы

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

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

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

header

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

+14
источник

Dll v/s Exe

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

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

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

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

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

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

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

+4
источник

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

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

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

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

+3
источник

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

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

+2
источник

.exe - это программа. DLL - это библиотека, к которой может обратиться .exe(или другая .dll).

То, что говорит sakthivignesh, может быть истинным в том, что один .exe может использовать другой, как если бы он был библиотекой, и это делается (например) с некоторыми COM-компонентами. В этом случае "ведомый".exe представляет собой отдельную программу (строго говоря, отдельный процесс - возможно, работает на отдельной машине), но тот, который принимает и обрабатывает запросы от других программ/компонентов/независимо.

Однако, если вы просто выбираете случайные файлы .exe и .dll из папки в своих программных файлах, вероятность того, что COM не имеет значения - это всего лишь программа и ее динамически связанные библиотеки.

Используя API Win32, программа может загружать и использовать DLL, используя функции LoadLibrary и GetProcAddress API, IIRC. В Win16 были аналогичные функции.

COM во многом представляет собой эволюцию идеи DLL, первоначально полученную в качестве основы для OLE2, тогда как .NET является потомком COM. Библиотеки DLL существуют со времен Windows 1, IIRC. Первоначально они были способом совместного использования двоичного кода (особенно системных API) между несколькими запущенными программами, чтобы минимизировать использование памяти.

+1
источник

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

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

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

+1
источник

Exe - исполняемая программа, тогда как DLL - это файл, который можно загружать и выполнять программами динамически.

0
источник

Разница в DLL и EXE:

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

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

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

0
источник

Основное точное различие между DLL и EXE в том, что DLL не имеет точки входа и EXE. Если вы знакомы с С++, вы можете видеть, что в сборке EXE есть функция main(), а DLL не:)

-2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос