Что такое файлы DLL и как они работают?

Как именно работают файлы DLL? Кажется, их очень много, но я не знаю, что это такое и как они работают.

Итак, что с ними делать?

Поскольку это только помечено тегом Windows, а этот вопрос был написан еще в 2008 году, стоит упомянуть, что в настоящее время dll запускается на Mac и Linux также с .NET Core.

Jim Aho 18.11.2018 23:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
245
1
268 988
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Что такое DLL?

Библиотеки динамической компоновки (DLL) похожи на EXE, но не являются исполняемыми напрямую. Они похожи на файлы .so в Linux / Unix. Другими словами, DLL - это реализация разделяемых библиотек MS.

DLL настолько похожи на EXE, что сам формат файла такой же. И EXE, и DLL основаны на формате файлов Portable Executable (PE). DLL также могут содержать компоненты COM и библиотеки .NET.

Что содержит DLL?

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

Типы библиотек:

Практически во всех операционных системах есть 2 типа библиотек. Статические библиотеки и динамические библиотеки. В Windows расширения файлов следующие: статические библиотеки (.lib) и динамические библиотеки (.dll). Основное отличие состоит в том, что статические библиотеки связываются с исполняемым файлом во время компиляции; тогда как динамически связанные библиотеки не связываются до времени выполнения.

Подробнее о статических и динамических библиотеках:

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

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

Загрузка DLL:

Программа загружает DLL при запуске через Win32 API LoadLibrary или когда это зависимость другой DLL. Программа использует GetProcAddress для загрузки функции или LoadResource для загрузки ресурса.

Дальнейшее чтение:

Пожалуйста, проверьте MSDN или Википедия для дальнейшего чтения. Также источники этого ответа.

Вероятно, следует где-то упомянуть импортную библиотеку. Хорошо, я уйду. :)

Adam Mitz 24.09.2008 04:43

Удалены те, которые вроде бы адресованы. Как мне получить за это баллы? <g>

Adam Mitz 24.09.2008 07:12

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

На самом деле они могут хранить пользовательский интерфейс, и это делают несколько программ. Например оснастки.

Brian R. Bondy 24.09.2008 03:42

http://support.microsoft.com/kb/815065

A DLL is a library that contains code and data that can be used by more than one program at the same time. For example, in Windows operating systems, the Comdlg32 DLL performs common dialog box related functions. Therefore, each program can use the functionality that is contained in this DLL to implement an Open dialog box. This helps promote code reuse and efficient memory usage.

By using a DLL, a program can be modularized into separate components. For example, an accounting program may be sold by module. Each module can be loaded into the main program at run time if that module is installed. Because the modules are separate, the load time of the program is faster, and a module is only loaded when that functionality is requested.

Additionally, updates are easier to apply to each module without affecting other parts of the program. For example, you may have a payroll program, and the tax rates change each year. When these changes are isolated to a DLL, you can apply an update without needing to build or install the whole program again.

http://en.wikipedia.org/wiki/Dynamic-link_library

Файлы DLL содержат Таблица экспорта, который представляет собой список символов, которые может найти вызывающая программа. Символы обычно являются функциями с Соглашение о вызовах C (__stcall). Таблица экспорта также содержит адрес функции.

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

Представляем библиотеки динамической компоновки содержит дополнительную информацию.

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

Статические библиотеки вставляются в исполняемый файл во время компиляции и фиксируются с этого момента. Они увеличивают размер исполняемого файла и не могут использоваться совместно.

Динамические библиотеки имеют следующие преимущества:

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

2 / Поскольку они независимы, код может совместно использоваться несколькими исполняемыми файлами - это экономит память, поскольку, если вы запускаете 100 приложений с одной DLL, в памяти может быть только одна копия DLL.

Их главный недостаток - преимущество №1 - изменение библиотек DLL независимо от вашего приложения может привести к тому, что ваше приложение перестанет работать или начнет вести себя странно. Управление версиями DLL, как правило, не очень хорошо выполняется в Windows, и это приводит к причудливому названию «DLL Hell».

Допустим, вы создаете исполняемый файл, который использует некоторые функции из библиотеки.

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

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

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

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

Чтобы увидеть это в действии, удалите или переименуйте DLL и посмотрите, как загрузчик сообщит об ошибке отсутствующей DLL при попытке запустить исполняемый файл.

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

И последнее замечание: если вы не ссылаетесь на DLL, то компоновщик не вставляет заглушки, но Windows по-прежнему предоставляет GetProcAddress API, который позволяет вам загружать и выполнять точку входа функции DLL спустя долгое время после запуска исполняемого файла.

Что такое DLL?

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

Они важны?

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

Для файлов DLL могут потребоваться другие файлы DLL.

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

Их очень много в системных папках

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

Установленные приложения также используют файлы DLL

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

DLL ад

Однако иногда обновления системы часто нарушают работу других программ, когда существует несоответствие версий общих файлов DLL и программы, которая их требует. Системные контрольные точки, кэш DLL и т. д. Были инициативами M $ для решения этой проблемы. Платформа .NET может вообще не столкнуться с этой проблемой.

Как мы узнаем, что находится внутри DLL-файла?

Вы должны использовать внешний инструмент, такой как ДАМПБИН или Dependency Walker, который не только покажет, какие общедоступные функции (известные как экспорт) содержатся в файлах DLL, а также какие другие файлы DLL ему требуются и какие файлы DLL экспортируют из этих файлов DLL. зависит от.

Как мы их создаем / используем?

Обратитесь к документации по программированию от вашего поставщика. Для C++ см. LoadLibrary в MSDN.

Пожалуйста, завершите это предложение ("The .NET platform might not face this issue at all.") объяснением почему. Спасибо.

Jogi 02.06.2016 22:20

@RehanKhan Начиная с .NET Framework v2.0, среда выполнения будет загружать только сборки, скомпилированные с версией .NET <= текущая загруженная среда выполнения + .NET также кэширует неудачные попытки загрузки сборок + если предыдущий вызов уже обнаружил сборку, среда выполнения CL будет использовать уже загруженную сборку. В общем, я бы подумал, что лучше сказать, что они решили проблему, применив очень жесткие ограничения на то, какие библиотеки DLL будет загружать среда выполнения программы (прежде чем она просто сдастся и попросит вашей помощи).

Vladislav Martin 11.04.2017 03:40

Рабочая ссылка для LoadLibrary - docs.microsoft.com/en-us/windows/win32/api/libloaderapi/…

Jack_Hu 28.08.2020 11:28

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

ЕСЛИ вы хотите получить больше информации о файлах DLL или столкнуться с какой-либо ошибкой, прочтите следующий пост. https://www.bouncegeek.com/fix-dll-errors-windows-586985/

По данным Microsoft

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

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

Если вам нужны подробные объяснения, просмотрите эти полезные ресурсы.

Что такое файлы dll, О Dll файлах

Другие вопросы по теме