Что такое длл? - PullRequest
       39

Что такое длл?

84 голосов
/ 27 января 2009

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

Так что же такое DLL?

  1. Для чего он используется?
  2. Как это работает?
  3. Как создать?
  4. В каких ситуациях создается один подходящий?

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

Ответы [ 6 ]

52 голосов
/ 27 января 2009

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

Так, например, в библиотеках доступны общие методы обработки файлов, работа с компонентами графического интерфейса и т. Д., Поэтому несколько приложений могут использовать одну и ту же функциональность. Это не только уменьшает необходимость создания одного и того же материала несколько раз, но также гарантирует, что, например, общие диалоги одинаковы между приложениями.

Библиотеки могут загружаться во время выполнения и, таким образом, совместно использоваться различными параллельными приложениями. Это называется динамическим связыванием.

В некоторых случаях библиотека может быть включена в само приложение. Это известно как статическое связывание. Статическое связывание упрощает развертывание за счет гибкости, поскольку каждое приложение будет загружать одну и ту же копию DLL.

Однако статическое связывание не всегда возможно. Например. вы не можете статически связать приложение .NET. Пользователь должен иметь библиотеки .NET для запуска приложения .NET, а библиотеки (или сборки, как они называются в .NET) загружаются во время выполнения.

DLL создаются теми же инструментами, которые используются для создания приложений. Конкретные детали во многом зависят от используемых инструментов.

26 голосов
/ 26 июня 2009

DLL = библиотека динамических ссылок

Название на самом деле довольно точно описывает то, что они делают.

Библиотека

Позволяет изолировать код для конкретной проблемной области в одном месте. Затем поделитесь этим между несколькими приложениями. Библиотека может быть заменена на другую в любое время, чтобы исправить ошибки или добавить функциональность.

Ссылка

Вы можете "связать" библиотеку с приложением, чтобы логика в библиотеке не компилировалась непосредственно в приложение.

Динамический

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

9 голосов
/ 19 августа 2011

DLL (динамически подключаемая библиотека) файлы можно описать как небольшие «подпрограммы», предназначенные для обеспечения хорошей работы большой программы. Они предоставляют средства связи различных аппаратных и программных ресурсов (в различные моменты сеансов во время выполнения) с основной исполняемой программой, на которой они основаны, по принципу «по мере необходимости». Это исключает необходимость загрузки всего, что связано с основной исполняемой программой, в оперативную память компьютера (оперативную память) при первом запуске программы.

Программные ресурсы, переносимые библиотеками DLL, включают в себя код для различных программных функций, которые на самом деле не нужны для поддержания работы программы: то есть функции, которые необходимо вызывать только в определенное время в течение определенного компьютерного сеанса и которые могут фактически даже не нужно звонить вообще. Загрузка этих функций (а их может быть значительное количество для данной программы) в ОЗУ компьютера при первом запуске программы, а затем их сохранение в течение всего сеанса - пустая трата пространства ОЗУ, которое считается премиум. ​​

Значительное улучшение:

Разработка DLL была значительным достижением в области вычислительной техники, поскольку до того, как они стали доступны, все, что было связано с программой (включая функции, которые редко использовались, когда-либо использовались), должно было загружаться в ОЗУ при первой загрузке программы. Это привело к крайне неэффективным вычислениям с более низкими скоростями, демонстрируемыми различными программами. Многозадачность также была чрезвычайно трудна при запуске даже нескольких простых программ из-за сопутствующей нагрузки на оперативную память.

Вопросы:

DLL, как правило, зависят от версии. Те, которые хорошо работают, скажем, с версией 1 программы (или языком программирования, в зависимости от обстоятельств), могут плохо работать с версией 2. Общее правило состоит в том, что библиотеки DLL в более старой версии, как правило, не могут работать хорошо с более новой версией, но те из более новой версии могут вообще работать довольно хорошо с более старой версией программы или языка программирования.

6 голосов
/ 27 января 2009

Динамически связанная библиотека.

В качестве примера: если в ваше приложение загружена чужая DLL, вы можете использовать немного программирования из нее.

Вы можете загрузить DLL, которая генерирует случайные числа, которые всегда начинаются с "5" или чего-то еще.

В вашей программе вы можете вызвать CrazyDLL.GenerateRandomNumbersSorta (), и он вернет число.

Для примера из реальной жизни у меня есть DLL, которая объединяет 4 текстовых поля (вы использовали бы их для ввода IP-адресов), и она автоматически принимает только числа меньше 256 и обрабатывает нажатие клавиши возврата на место для перехода к предыдущему текстовому полю.

Я создал DLL с этим кодом, и теперь все, что мне нужно сделать, это перетащить больше этих текстовых коллекций IP-адресов без необходимости дублировать весь этот код снова и снова.

В той же библиотеке DLL также есть функция для преобразования IP-адресов в шестнадцатеричные строки и другой полезный код.

1 голос
/ 27 января 2009

DLL = динамическая загрузка библиотека ссылок. Как вам сказали, это в основном набор функций, классов C ++ и / или глобальных переменных. Вы можете загрузить DLL статически (т.е. ОС загружает ее автоматически при запуске вашей программы) или динамически (ваша программа загружает ее явно), после чего функции и компоненты внутри DLL становятся доступны вашей программе.

Создание аналогично созданию EXE-файла, за исключением того, что не требуется функция main(). Существуют директивы компоновщика, которые сообщают компоновщику о создании DLL, а не EXE-файла.

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

Несколько историческая причина в том, что ваш exe-файл может быть меньше, поскольку часть кода физически находится в другом файле. Это означает, что количество места, занимаемого в памяти вашим exe-файлом, может быть меньше. В современных системах это не такая большая проблема, как раньше, хотя она все еще может быть проблемой в Windows Mobile.

1 голос
/ 27 января 2009

Из MSDN Library :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...