Найти в Дзене
Fisk 365

DLL (Динамически подключаемая библиотека )

Оглавление

Что такое DLL?

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

Назначение

Первоначально предполагалось, что введение DLL позволит эффективно организовать память и дисковое пространство, используя только один экземпляр библиотечного модуля для различных приложений. Это было особенно важно для ранних версий Microsoft Windows с жёсткими ограничениями по памяти. Затем предполагалось улучшить эффективность разработок и использования системных средств за счёт модульности. Замена DLL-программ с одной версии на другую должна была позволить независимо наращивать систему, не затрагивая приложений. Кроме того, динамические библиотеки могли использоваться разнотипными приложениями, такие как: Microsoft Office, Microsoft Visual Studio и т. п. Фактически полных преимуществ от внедрения динамически подключаемых библиотек получить не удалось по причине явления, называемого DLL hell .

DLL hell

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

Создание собственной DLL

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

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

Вызов DLL из внешней программы

Библиотеку DLL можно связать с приложением двумя способами:

  • статическим связыванием
  • динамическим связыванием

Теперь мы разберем эти понятия :

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

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

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

Вывод

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