1.2 Основы разработки DLL
Разработка динамических библиотек не представляет собой некий сверхсложный процесс, доступный лишь избранным. Если вы достаточно хорошо знакомы с разработкой приложений на Object Pascal, то вам не составит особого труда научиться работать с механизмом DLL. Итак, рассмотрим те особенности создания DLL, которые вам необходимо знать, а в завершении статьи разработаем свою собственную библиотеку.
Как и любой другой модуль, модуль динамической библиотеки имеет фиксированный формат. Взгляните на листинг, представленный ниже.
library MyFirstDLL;
uses
SysUtils,
Classes,
Forms,
Windows;
procedure HelloWorld(AForm : TForm);
begin
MessageBox(AForm.Handle, Hello world!,
DLL Message Box, MB_OK or MB_ICONEXCLAMATION);
end;
exports
HelloWorld;
begin
end.
Первое, на что следует обратить внимание, это ключевое слово library, находящееся вверху страницы. Library определяет этот модуль как модуль библиотеки DLL. Далее идет название библиотеки. В нашем примере мы имеем дело с динамической библиотекой, содержащей единственную процедуру: HelloWorld. Причем обратите внимание, что данная процедура по структуре ничем не отличается от тех, которые вы помещаете в модули своих приложений. Ключевое слово exports сигнализирует компилятору о том, что перечисленные ниже функции и/или процедуры должны быть доступны из вызывающих приложений (т.е. они как бы "экспортируются" из библиотеки). Подробнее о механизме экспорта мы поговорим чуть позже.
И, наконец, в конце модуля можно увидеть ключевые слова begin и end. Внутри данного блока вы можете поместить код, который должен выполняться в процессе загрузки библиотеки. Достаточно часто этот блок остается пустым.
Как уже говорилось выше, все процедуры и функции, помещаемые в DLL, могут быть разделены на две группы: экспортируемые (вызываемые из других приложений) и локальные. Естественно, внутри библиотеки также могут быть описаны классы, которые в свою очередь содержат методы, но в рамках данной статьи я не буду на этом останавливаться. Описание и реализация процедур и функций, вызываемых в пределах текущей DLL, ничем не отличаются от их аналогов в обычных проектах-приложениях. Их специфика заключается лишь в том, что вызывающая программа не будет иметь к ним доступа. Она просто не будет ничего знать об их существования, так же, как одни классы ничего не знают о тех методах, которые описаны в секции private других классов. В дополнение к процедурам и функциям, DLL может содержать глобальные данные, доступ к которым разрешен для всех процедур и функций в библиотеке. Для 16-битных приложений эти данные существовали в единственном экземпляре независимо от количества загруженных в оперативную память программ, которые используют текущую библиотеку. Другими словами, если одна программа изменяет значение глобальной переменной a на 100, то для всех остальных приложений a будет значение 100. Для 32-битных приложений это не так. Теперь для каждого приложения создается отдельная копия глобальной области данных.
- Введение
- Глава 1. Разработка динамически подключаемых библиотек DLL
- 1.1 Аргументы в пользу использования DLL
- 1.2 Основы разработки DLL
- 1.3 Экспорт функций из DLL
- 1.4 Использование DLLProc
- 1.5 Вызов процедур и функций, загруженных из DLL
- Глава 2. Разработка программы
- 2.1 Постановка задачи
- 2.2 Описание механизма программы
- 2.3 Блок схемы
- 2.4 Структуры данных
- 2.5 Системные требования
- Заключение
- 1.Назначение динамически подключаемых библиотек
- 15. Понятие динамически подключаемой библиотеки. Структура dll-библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе. Статический и динамический импорт.
- Лабораторная работа 34. Использование динамически подключаемых библиотек (DLL).
- Динамически подключаемые библиотеки (dll)
- 3 Динамически подключаемые библиотеки.
- 11. Динамически подключаемые библиотеки (dll). Явная и неявная загрузка dll.
- 2.5.5.4. Динамически подключаемые библиотеки
- 2.4. Динамически подключаемые библиотеки.
- Разработка библиотек dll