Глава 13
ДИНАМИЧЕСКИ
ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ (DLL)
13.1.
НАЗНАЧЕНИЕ
Динамически подключаемые библиотеки
(далее DLL - Dynamic Link Library) представляют собой универсальный механизм
интегрирования в вашу программу процедур и функций, написанных другими программистами
и, в общем случае, на других, чем Object Pascal, языках программирования.
DLL реализуются в виде исполняемых
модулей, содержащих готовые к работе процедуры, функции и/или ресурсы. С точки
зрения программиста, есть много общего между DLL и обычными для Object Pascal
модулями, т. к. в конечном счете и библиотеки, и модули поставляют подпрограммы,
избавляющие программиста от написания собственного кода. Но есть и принципиальные
отличия. Главным из них является то, что DLL не в состоянии поставлять в программу
переменные, константы и типы, ведь создатели DLL могут использовать не типизированные
языки программирования, например, язык ассемблера. В результате DLL не могут
экспортировать в программу столь необходимые сегодня программисту классы - для
этого используются пакеты.
Другим важным отличием является способ
связывания экспортируемых подпрограмм с основной программой. Модули связываются
с программой на этапе компоновки, т. е.
статически.
Если загружены две
программы, использующие одни и те же модули, в памяти будут два экземпляра одинаковых
фрагментов кода. В отличие от этого DLL подключаются к программе в момент ее
исполнения, т. е.
динамически.
Если опять же две программы используют
одну и ту же DLL, в памяти будет лишь один экземпляр разделяемого программами
кода. Следует уточнить, что речь идет о физической памяти компьютера. Поскольку
каждая программа получает в свое распоряжение виртуальное адресное пространство
(подробнее о процессах и памяти говорится в гл. 14), в эти пространства будут
отображаться столько
образов
DLL, сколько программ ее используют (см.
в главе 11 раздел “Отображение файлов в память”).
Динамическое подключение DLL дает
им еще одно немаловажное преимущество над модулями: изменение любой DLL в большинстве
случаев не требует перекомпиляции использующей ее программы.