Синтаксис исходного текста dll
Исходный текст библиотеки DLL на языке Borland Pascal 8, используемом Delphi, чем-то напоминает исходный текст модуля (Unit) и выглядит следующим образом:
library <имя>; // вместо Program или Unit uses <обычный список используемых модулей>;
<Объявление процедур и функций>
exports Proc1 index 10, Proc2 name 'ProcedureTwo', Proc3, .....;
begin <возможные начальные установки, напр. - для глоб. переменных> end.
Стандартным образом, как для исполнимого модуля .EXE, в теле программы или в unit'ах описываются процедуры и данные.
Во фразе exports через запятую перечисляются идентификаторы экспортируемых, т.е. предназначенных для вызова внешними программами, процедур. Фраза exports может встречаться в тексте сколько угодно раз и перемежаться с объявлением процедур, единственное условие – процедура должна сначала объявляться, а затем экспортироваться. Рекомендуется объявлять экспортируемые процедуры с моделью вызова StdCall, гарантированно поддерживаемой трансляторами всех языков программирования для Windows. Экспортировать можно и процедуры из модулей.
Для каждой экспортируемой процедуры может быть в явном виде указан числовой идентификатор (компилятор по умолчанию присваивает последовательные числа) и символьный идентификатор (по умолчанию берется идентификатор из программы и переводится в верхний регистр). Именно по этим идентификаторам использующие DLL программы обращаются к ее функциям. В документации Microsoft рекомендуется пользоваться исключительно символьными идентификаторами, хотя это несколько замедляет процесс загрузки DLL.
Глобальные переменные DLL, в отличие от модуля (Unit), не могут быть экспортированы. Кроме того, если DLL используется в нескольких процессах, то для каждого процесса создается отдельная копия глобальных переменных DLL, и поэтому глобальные переменные DLL в принципе не могут быть использованы для передачи данных между процессами даже в случае доступа к ним через функции самой DLL.
DLL может содержать ресурсы, для их подключения используется все та же директива компилятора {$R}. Так как DLL является законченным исполнимым файлом, в отличие от модуля Unit, то ресурсы физически включаются в тело DLL.
- Подключение файлов ресурсов к программе
- Ресурсы пользователя
- Inactive - пункт неактивен (не генерирует wm_command), но отображается обычным образом, несовместимо с grayed.
- Основные сообщения меню
- Использование таблицы акселераторов
- Окна диалога
- Библиотеки dll
- Синтаксис исходного текста dll
- Поиск используемых dll
- Подключение dll на этапе загрузки
- Подключение dll на этапе выполнения
- Использование ресурсов из dll
- Задание
- Варианты заданий: