Домой / Музыка / Работа с библиотеками динамической компоновки (DLL). Что такое dll

Работа с библиотеками динамической компоновки (DLL). Что такое dll

DLL или dynamic-link library это файл с дополнительными ресурсами, которые могут использоваться программами и самой операционной системой. В DLL файлы помещают исполняемый код и другие данные нужные различным программам при их выполнении. Один и тот же DLL файл может использоваться несколькими программами одновременно.

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

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

В операционной системе Windows также используются файлы.ocx (ActiveX), .cpl (Панель управления), .drv (драйверы). Они имеют такую же структуру и выполняют те же задачи что и DLL библиотеки.

Возможные проблемы с DLL файлами

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

Как правило, эта проблема решается очень просто. Нужно найти в Интернете и скачать файл об отсутствии которого сообщает программа. После этого скопируйте его в папку с игрой, а также в папки Windows и Windows\system32. В большинстве случаев этого достаточно для решения проблемы.

DLL – аббревиатура от Dynamic Link Library («динамически подключаемая библиотека» с англ.). Динамическая библиотека ресурсов и подпрограмм позволяет использовать ранее написанные модули многократно. Файл-библиотека может включать в себя, например, процедуры, иконки. Необходима она для работы операционных систем Windows.

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


Набор динамических подпрограмм может одновременно использоваться в нескольких работающих программах – это еще один плюс. Именно поэтому они еще носят название «библиотека общего пользования». Суть в том, что в ОЗУ загружается только одна копия динамической библиотеки, а обращаются к ней все активные в данный момент программы. Что тоже ведет к экономии ресурса ОЗУ. Кроме критически-необходимых подпрограмм в библиотеке DLL хранятся дополнительные функции. Их можно использовать как плагин (Plug-ins), умножая тем самым функциональность программы. Отсутствие нужного модуля в библиотеке DLL делает работу основной программы невозможной. Это отрицательное качество динамической библиотеки.


Файлы из динамической библиотеки имеют стандартное расширение в каждой операционной системе: в OS/2 и MS Windows – «.dll»; Mac OS - «.dylib»; UNIX – «.so». Хранятся такие файлы в определенном месте. Например, в «System32». Программист при написании приложения указывает имя нужной функции и имя библиотеки, в которой она находится. Сам код подпрограммы в исходном тексте не пишется, что существенно упрощает процесс программирования. Этот принцип основан на популярном ранее модульном кодинге. Простые программы оформлялись как отдельные модули, что позволяло не писать их каждый раз заново, а включать в код новой программы в готовом виде – откомпилированный модуль.


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


Будьте очень внимательны при работе: никогда не меняйте расширение «.dll» на иное, не переносите эти файлы в другую папку. Если файлу присвоить суффикс «.dll», то это не изменит его тип. Для конвертирования требуется специальное приложение. Чаще всего ошибки в работе Windows связаны именно с отсутствием нужного файла «.dll».

Рад видеть вас на своём блоге!

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

Разъяснение

Данная аббревиатура расшифровывается как «Dynamic Link Library», а на нашем языке - «библиотека динамической компоновки» или чаще как «динамически подключаемая библиотека». Она по умолчанию устанавливается в ОС Windows, а раньше ещё и в IBM OS/2, пока она не прекратила своё существование. Библиотека предназначена для многократного использования различным программным обеспечением.

DLL содержит в себе важные сведения: о конфигурации системы, совместимости устройств, командах для их корректной работы и пр. Всё это хранится в файлах одноимённого расширения либо.drv для нескольких системных драйверов, .cpl - для файлов панели управления или в.ocx, если речь идёт о библиотеках содержащих фреймворк ActiveX.

Объекты.dll включают в себя коды и данные, которые могут использоваться одновременно несколькими программами. Своим содержимым они похожи на тип файлов EXE. Кстати, у них даже одинаковый формат: Portable Executable (PE) для 32-х и 64-х битных приложений Windows, и New Executable (NE) для 16-битных.

Многие устанавливаемые нами программы уже имеют в своём наборе такие файлы. В противном случае они пользуются теми, которые есть в операционке.

Динамические библиотеки на практике

В теории вроде бы всё ясно. Но чтобы понять суть предмета нашей беседы, необходимо увидеть его с практической стороны. Без него проги не могут работать, потому что не знают, как это делать.

Вот вам элементарный пример. Чтобы на чистом листе в Office Word начали появляться вводимые вами символы, нужны компоненты библиотеки, потому что сама по себе ОС не в курсе, что значит та или иная нажатая вами клавиша.

Даже когда вы просто включаете компьютер и ещё не успели ничего сделать, библиотека уже активно действует: показала вам время и дату, открыла программы в автозапуске, выстроила оформление рабочего стола, проштудировала сведения о конфигурации операционки и т. п. Вдобавок, как система общаться с мышью, клавиатурой, принтером и другим оборудованием, тоже объясняет ДЛЛ.

Преимущества DLL

Для чего предназначены динамические библиотеки? Они создавались для того, чтобы:

Ад для библиотек

В полной мере реализовать описанные выше преимущества всё-таки не удалось. Дело в том, что ПО может одновременно потребовать не полностью совместимые версии библиотек. Из-за этого случаются сбои в его работе. Вдобавок вследствие конфликтов снижается надёжность ОС в целом. Такое явление называется «DLL hell» (если кто не знает, то последнее слово переводится как «ад»).

Как это видит пользователь?

Предположим, вы никогда не обновляли на своём компьютере эти библиотеки и установили игру, выпущенную лет 5 назад. Она работает у вас нормально. Затем вы обнаружили, что недавно вышла последняя часть игры, и инсталлировали её тоже.

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

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

Решение

Чтобы подобные ситуации не всплывали, в последних поколениях Виндовс появилась технология Side-by-side assembly. Она позволяет использоваться параллельно разные версии библиотек. Правда, это нововведение идёт в разрез с принципом модульности, который изначально был преимуществом.

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

На этом всё.

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

Иногда при запуске какой-либо программы появляется сообщение, что не найден файл *.dll (например, VCompLib.dll) или *.ocx (например, seon.ocx). При этом программа, естественно, не запускается.

Сообщения об ошибках могут быть разные (это зависит в основном от того, на каком языке написана программа), например: «Component "MSCOMM32.OCX" not correctly registered: file is missing or invalid» , или «Приложению не удалось запуститься, поскольку MSVBVM50.DLL не был найден. Повторная установка приложения может исправить эту проблему» , или «Runtime DLL/OCX File error» . При этом в Windows Vista дополнительно появится окно Помощника по совместимости программ с сообщением Эта программа требует отсутствующий компонент Windows .

Краткая справка

· DLL (от англ. Dynamic-L ink L ibrary динамически подключаемая библиотека) понятие операционной системы Microsoft Windows ; динамическая библиотека, позволяющая многократное применение различными программнымиприложениями. K DLL иногда причисляют также элементы управления ActiveX и . В мире UNIX аналогичные функции выполняют так называемые shared objects («разделяемые объекты»). Формат файлов *.dll придерживается тех жесоглашений, что и формат исполняемых файлов *.exe , сочетая код, таблицы и ресурсы.

·ActiveX название группы технологий, разработанных Microsoft для программирования компонентных объектных приложений на основе модели COM .

·COM (сокр. от англ. Component Object Model ) модель компонентных объектов Microsoft , стандартный механизм, включающий интерфейсы, с помощью которых одни объекты предоставляют свои сервисы другим; являетсяосновой многих объектных технологий, в том числе OLE и ActiveX ).

·OLE (сокр. от англ. Object Linking and Embedding ) общее название (до 1996 г.) группы объектно-ориентированных технологий Microsoft на основе COM (OLE 1, OLE 2, OLE automation , OLE Database и др.).

· ActiveX control управляющий элемент ActiveX ; введенное в 1996 г. Microsoft новое название независимых программируемых компонентов, ранее называемых OLE controls , OCXs , OLE custom controls ; в отличие от последнихпозволяют работать с Internet .

· OCX (сокр. от англ. OLE Custom eXtension ) перемещаемые элементы управления, OLE custom control , OLE control . можно сказать, что файлы *.ocx это элементы управления ActiveX , выполняющие примерно те жефункции, что и файлы *.dll .

· OLE custom control специализированный управляющий элемент OLE , OLE control .

·OLE control управляющие элементы OLE , программируемые компоненты-приложения с интерфейсом на базе OLE , позволяющим легко включать их в другие приложения; c 1996 г. называются ActiveX control . Синонимы: OCX , OLEcustom control .

Способы решения проблемы

Если возникают ошибки, связанные с файлами *.dll и *.ocx , необходимо:

1. Переустановить программу.

2. Если переустановка программы не помогает, нужно проверить наличие в системе требуемых файлов. Файлы *.dll и *.ocx , как правило, должны быть расположены в папке \WINDOWS\system32 (реже – в каталоге конкретной программы). Если файлы присутствуют, нужно их.

Если требуемых файлов нет, найдите их в Интернете, скачайте и скопируйте в папку \WINDOWS\system32 и в каталог программы. Теперь нужно их.

При регистрации файлов *.dll и *.ocx происходит их запись в Реестр Windows (это можно сделать и вручную). При этом в ветке создаётся параметр REG_DWORD , например C:\Program Files\InterVideo\Common\Bin\StorageTools.dll или C:\WINDOWS\System32\MSCOMCTL.OCX, со значением 1 .

Регистрация файлов *.dll и *.ocx производится с помощью сервера регистрации regsvr32.exe (дисковый адрес которого – C:\WINDOWS\system32).

Рассмотрим способы регистрации:

1. Нажмите Пуск – Выполнить… – Запуск программы – regsvr32 имя_файла – OK .

2. Нажмите Пуск – Выполнить… – Запуск программы – cmd – OK . Запустится интерпретатор команд cmd.exe , после приглашения системы C:\Documents and Settings\Имя_пользователя> введите regsvr32 имя_файла , например, regsvr32 seon.ocx.

3. Если вы пользуетесь файловым менеджером Total Commander , то можно выполнить регистрацию файлов *.dll и *.ocx с помощью командной строки Total Commander .

Примечание

Использование команды regsvr32 :

regsvr32 ] DLL-файл

/u – отменяет регистрацию DLL ;

/s – «тихий» режим – окна сообщений не отображаются;

8 ответов

Что такое DLL?

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

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

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

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

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

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

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

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

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

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

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

Связанные вопросы


Похожие вопросы

Что такое DLL?

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

Насколько они важны?

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

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

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

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

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

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

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

DLL Hell

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Их основным недостатком является преимущество # 1 - изменение библиотеки DLL независимо от приложения может привести к тому, что ваше приложение перестанет работать или начнет вести себя причудливо. Версии DLL, как правило, не очень хорошо управляются под Windows, и это приводит к причудливому названию "DLL Hell".