Я хочу знать точную разницу между dll и exe файлом.
Я хочу знать точную разницу между dll и exe файлом.
Ответы:
ИСПОЛНЯЕМЫЙ:
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_D
Ссылка: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
функцию.
Я не знаю, почему все отвечают на этот вопрос в контексте .NET. Вопрос был общим и нигде не упоминал .NET.
Что ж, основные отличия заключаются в следующем:
исполняемый
DLL
Формат файлов DLL и exe практически одинаков. Windows распознает разницу между DLL и EXE через PE-заголовок в файле. Подробнее о заголовке PE можно прочитать в этой статье на MSDN.
Разница в том, что у EXE есть точка входа, «основной» метод, который запускается при выполнении.
Код в DLL необходимо вызывать из другого приложения.
Вы могли бы упомянуть еще несколько отличий относительно структуры.
Characteristics
члена . Для библиотеки DLL установлен флаг (0x2000). Для EXE это флаг (0x2).IMAGE_FILE_HEADER
IMAGE_NT_HEADERS
IMAGE_FILE_DLL
IMAGE_FILE_EXECUTABLE_IMAGE
IMAGE_OPTIONAL_HEADER
) есть ImageBase
член. Он указывает виртуальный адрес, по которому PE предполагает, что он будет загружен. Если он загружен по другому адресу, некоторые указатели могут указывать на неправильную память. Поскольку EXE-файлы одними из первых загружаются в новое адресное пространство, загрузчик Windows может гарантировать постоянный адрес загрузки, обычно это 0x00400000. Такой роскоши не существует для DLL. Два файла DLL, загруженные в один процесс, могут запрашивать один и тот же адрес. Вот почему в DLL есть другой каталог данных, называемый Base Relocation Directory, который обычно находится в отдельном разделе - .reloc
. Этот каталог содержит список мест в DLL, которые необходимо переустановить / исправить, чтобы они указывали на нужную память. У большинства EXE-файлов нет этого каталога, но некоторые старые компиляторы создают их.Вы можете прочитать больше по этой теме @ MSDN .
Этот ответ был немного более подробным, чем я думал, но прочитайте его.
DLL:
в большинстве случаев файл DLL представляет собой библиотеку . Есть несколько типов библиотек, динамические и статические - читайте о различиях . DLL выступает за динамическую связь библиотеки , которая говорит нам , что это часть программы , но не все это. Он состоит из многократно используемых программных компонентов ( библиотеки ), которые вы можете использовать более чем для одной программы . Имейте в виду, что всегда можно использовать исходный код библиотеки во многих приложениях с помощью копирования и вставки, но идея DLL / статической библиотеки заключается в том, что вы можете обновить код библиотеки и в то же время обновить все приложения, используя это - без компиляции.
Например:
представьте, что вы создаете компонент графического интерфейса Windows, такой как кнопка . В большинстве случаев вы захотите повторно использовать написанный код, потому что это сложный, но общий компонент - вы хотите, чтобы его использовали многие приложения, но вы не хотите предоставлять им исходный код. Вы не можете скопировать -Вставьте код кнопки в каждую программу, чтобы вы решили создать DL-библиотеку (DLL) .
Эта библиотека «кнопок» требуется для запуска EXE- файлов, и без нее они не будут работать, потому что они не знают, как создать кнопку, а знают только, как с ней разговаривать.
Точно так же DLL не может быть запущена - запущена, потому что это только часть программы, но не имеет информации, необходимой для создания «процесса» .
EXE:
исполняемый файл - это программа . Он знает, как создать процесс и как общаться с DLL. Она нуждается в DLL , чтобы создать кнопку, и без него приложение не запускается - ERROR.
надеюсь это поможет....
using SomeClassFromALibrary
, эта библиотека связана с проектом через DLL? Просто пытаюсь понять, правильно ли я понимаю
using
для пространств имен, а не для классов. Исключение using static
доступно для C # 6, который импортирует все статические члены, присутствующие в указанном классе ( ссылка ). using
Ключевое слово дает обещание компилятору , что во время выполнения там будет библиотека , содержащая это пространство имен . Библиотека не связана с проектом через эту DLL, DLL - это библиотека, связанная с проектом (сборкой). Эта DLL содержит весь код, обещанный во время компиляции.
И DLL, и EXE являются форматами Portable Executable (PE)
Библиотека динамической компоновки (DLL) библиотека и , следовательно , не может быть выполнена непосредственно. Если вы попытаетесь запустить его, вы получите сообщение об отсутствии точки входа. Для его выполнения требуется точка входа (основная функция), этой точкой входа может быть любое приложение или exe. Связывание DLL происходит во время выполнения. Вот почему это называется библиотекой «Dynamic Link».
Executable (EXE) это программа , которая может быть выполнена. У него есть собственная точка входа. Флаг внутри заголовка PE указывает, какой это тип файла (независимо от расширения файла). Заголовок PE имеет поле, в котором находится точка входа для программы. В библиотеках DLL он не используется (по крайней мере, не как точка входа).
Для проверки информации заголовка доступно множество программ . Единственная разница, из-за которой оба работают по-разному, - это бит в заголовке, как показано на диаграмме ниже.
EXE-файл имеет только одну основную запись, что означает, что это изолированное приложение, когда система запускает exe, создается новый процесс, в то время как библиотеки DLL имеют много точек входа, поэтому, когда приложение использует его, новый процесс не запускается, DLL можно повторно использовать и версировать. DLL уменьшает пространство для хранения, поскольку разные программы могут использовать одну и ту же dll.
.exe
или .dll
нет? Это тот флаг в заголовке, который действительно их отличает ... Так что, если я создам и назову exe
его через взаимодействие с графическим интерфейсом как a .dll
, но затем изменю этот флаг вручную, он все равно будет работать?
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, и они не предназначены для редактирования пользователями.
Две вещи: расширение и флаг заголовка, хранящиеся в файле.
Оба файла являются файлами PE. Оба содержат одинаковый макет. DLL - это библиотека и поэтому не может быть запущена. Если вы попытаетесь запустить его, вы получите сообщение об отсутствии точки входа. EXE - это программа, которая может быть выполнена. У него есть точка входа. Флаг внутри заголовка PE указывает, какой это тип файла (независимо от расширения файла). Заголовок PE имеет поле, в котором находится точка входа для программы. В библиотеках DLL он не используется (по крайней мере, не как точка входа).
Одно небольшое отличие состоит в том, что в большинстве случаев библиотеки DLL имеют раздел экспорта, в который экспортируются символы. EXE никогда не должны иметь раздела экспорта, поскольку они не являются библиотеками, но ничто не мешает этому. Загрузчику Win32 все равно.
В остальном они идентичны. Итак, вкратце, EXE - это исполняемые программы, а DLL - это библиотеки, загружаемые в процесс и содержащие какие-то полезные функции, такие как безопасность, доступ к базе данных или что-то еще.
.Exe - это программа. .Dll - это библиотека, которую может вызывать .exe (или другая .dll).
То, что говорит sakthivignesh, может быть правдой в том, что один .exe может использовать другой, как если бы это была библиотека, и это делается (например) с некоторыми компонентами COM. В этом случае «подчиненный» .exe - это отдельная программа (строго говоря, отдельный процесс - возможно, запущенный на отдельной машине), но она принимает и обрабатывает запросы от других программ / компонентов / чего угодно.
Однако, если вы просто выберете случайные .exe и .dll из папки в ваших программных файлах, есть вероятность, что COM не имеет значения - это просто программа и ее динамически подключаемые библиотеки.
Используя Win32 API, программа может загружать и использовать DLL, используя функции LoadLibrary и GetProcAddress API, IIRC. Подобные функции были и в Win16.
COM во многом является развитием идеи DLL, изначально задуманной как основа для OLE2, тогда как .NET является потомком COM. DLL существуют со времен Windows 1, IIRC. Изначально они были способом совместного использования двоичного кода (особенно системных API) между несколькими запущенными программами, чтобы минимизировать использование памяти.
EXE отображается для системы как обычный исполняемый файл Win32. Его точка входа относится к небольшому загрузчику, который инициализирует среду выполнения .NET и сообщает ему загрузить и выполнить сборку, содержащуюся в EXE. DLL видна системе как Win32 DLL, но, скорее всего, без точек входа. Среда выполнения .NET хранит информацию о содержащейся сборке в собственном заголовке.
dll - это набор многоразовых функций, где в качестве .exe - исполняемый файл, который может вызывать эти функции.
EXE - это исполняемая программа, тогда как DLL - это файл, который может загружаться и выполняться программами динамически.
● .exe и dll - это скомпилированные версии кода C #, которые также называются сборками.
● .exe - это отдельный исполняемый файл, что означает, что он может выполняться напрямую.
● .dll - это компонент многократного использования, который нельзя запустить напрямую, и для его выполнения требуются другие программы.
1) DLL - это внутрипроцессный компонент, что означает работу в том же пространстве памяти, что и клиентский процесс. EXE - это компонент Out-Process, что означает, что он работает в собственном отдельном пространстве памяти.
2) DLL содержит функции и процедуры, которые могут использоваться другими программами (способствует повторному использованию), в то время как EXE не может использоваться совместно с другими программами.
3) DLL нельзя запускать напрямую, так как они предназначены для загрузки и запуска другими программами. EXE - это программа, которая выполняется напрямую.
Для тех, кто ищет краткий ответ,
Если сборка скомпилирована как библиотека классов и предоставляет типы для использования другими сборками, то она имеет расширение ifle .dll
(библиотека динамической компоновки) и не может выполняться автономно.
Аналогично, если сборка скомпилирована как приложение, она имеет расширение файла .exe
(исполняемый файл) и может выполняться автономно. До .NET Core 3.0 консольные приложения компилировались в файлы .dll и должны были выполняться командой dotnet run или исполняемым файлом хоста. - Источник
Основное точное различие между DLL и EXE в том, что у DLL нет точки входа, а у EXE есть. Если вы знакомы с c ++, вы можете увидеть, что build EXE имеет функцию входа main (), а DLL нет :)