logo search
Программирование в среде Delphy / Программирование в среде Delphi

28. Динамические библиотеки

Динамически подключаемые библиотеки (Dynamic Link Library – DLL) играют важную роль в функционировании ОС Windows и прикладных программ.

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

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

Разновидностью динамических библиотек являются пакеты Delphi, предназначенные для хранения кода компонентов для среды разработки и приложений. Применение динамических библиотек позволяет добиться ряда преимуществ:

• уменьшаются размер исполняемого файла приложения и занимаемые им ресурсы;

• функции DLL могут использовать несколько процессов одновременно;

• управление динамическими библиотеками возлагается на операционную систему;

• внесение изменений в DLL не требует перекомпиляции всего проекта;

• одну DLL могут использовать программы, написанные на разных языках программирования.