Что такое dll?

90

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

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

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

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

Даниэль
источник
Вики сообщества следует использовать в случаях, когда на ваш вопрос нет реальных ответов. Это правильный вопрос, и, выбрав режим сообщества вики, вы предотвращаете получение репутации себя и респондентов в этом вопросе.
Серафина Бросиус,
этот вопрос может стать очень популярным
Тамаш Чинеге
1
Думаешь? Может быть, за просмотры, но вряд ли за голоса ... Во всяком случае, уже 4 раза ответили.
Омар Кухеджи,
2
это тривиально можно погуглить ...
annakata
3
Да, это можно гуглить, но я действительно не нашел много хороших кратких объяснений этого, особенно по вопросу о его создании и о том, когда его целесообразно использовать.
Daniel

Ответы:

55

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

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

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

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

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

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

Брайан Расмуссен
источник
Спасибо за ответ. Мне интересно, как приложения узнают, какие функции доступны в dll? Сама dll - это машинный код, верно? Так как же доступны подписи публичных функций в dll?
Daniel
Я не знаю о большинстве языков, но автозаполнение Visual Studio покажет вам все доступные функции.
Грант
1
Но как автозаполнение определяет, какие есть доступные функции, если dll - это просто машинный код?
Daniel
2
Машины могут читать машинный код. DLL могут содержать значки, строки, шрифты. Вероятно, где-то там есть список того, что в нем содержится.
Грант
1
Visual C ++ содержит инструмент под названием dumpbin - запуск «dumpbin / exports Any.dll» сообщит вам, какие функции и прочее экспортируются (т.е. доступны для использования программами, загружающими DLL).
Грэм Перроу
29

DLL = Библиотека динамической компоновки

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

Библиотека

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

Ссылка на сайт

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

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

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

Пол Александр
источник
10

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

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

Главное достижение:

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

Соображения:

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

джуди смит
источник
7

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

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

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

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

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

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

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

Гранта
источник
1

Из библиотеки MSDN :

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

Неманья Трифунович
источник
1

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

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

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

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

Грэм Перроу
источник