Динамические библиотеки
Динамические библиотеки (DLL, Dynamic Link Library) играют важную роль в функционировании ОС Windows и прикладных программ. Они представляют собой файлы с откомпилированным исполняемым кодом, который используется приложениями и другими DLL. Реализация многих функций ОС вынесена в динамические библиотеки, которые используются по мере необходимости, обеспечивая тем самым экономию адресного пространства. DLL загружается в память только тогда, когда к ней обращается какой-либо процесс.
По существу динамические библиотеки отличаются от исполняемых файлов только одним, они не могут быть запущены самостоятельно. Для того чтобы динамическая библиотека начала работать, необходимо, чтобы ее вызвала уже запущенная программа или работающая DLL.
Обычно в динамические библиотеки выносятся группы функций, которые применяются для решения сходных задач. Кроме этого, в них можно хранить и использовать разнообразные ресурсы – от строк локализации до форм.
Динамическая библиотека может использоваться несколькими приложениями, при этом не обязательно, чтобы все они были созданы при помощи одного языка программирования.
Разновидностью динамических библиотек являются пакеты Delphi, предназначенные для хранения кода компонентов для среды разработки и приложений.
Применение динамических библиотек позволяет добиться ряда преимуществ:
- уменьшается размер исполняемого файла приложения и занимаемые им ресурсы;
- функции DLL могут использовать несколько процессов одновременно;
- управление динамическими библиотеками возлагается на операционную систему;
- внесение изменений в DLL не требует перекомпиляции всего проекта;
- одну DLL могут использовать программы, написанные на разных языках.
При разработке динамических библиотек в среде Delphi удобно использовать группу проектов, которая включает проект приложения и проекты динамических библиотек.
В этой главе рассматриваются следующие вопросы:
- структура файла DLL;
- инициализация DLL;
- явная и неявная загрузка;
- вызовы функций из динамической библиотеки;
- ресурсы в динамических библиотеках.