По структуре исходный текст библиотеки похож на исходный текст программы, за исключением того, что текст библиотеки начинается с ключевого слова library, а не слова program. Например:
После заголовка следуют секции:
· подключения модулей;
· описания констант, типов данных, переменных;
· описания процедур и функций.
Процедуры и функции — это главное, что должно быть в динамически загружаемой библиотеке, поскольку лишь они могут быть экспортированы.
Если в теле библиотеки объявлены некоторые процедуры,
procedure BubleSort(var Arr: array of Integer);procedure QuickSort(var Arr: array of Integer); |
то это еще не значит, что они автоматически будут доступны для вызова извне. Для того чтобы это разрешить, нужно поместить имена процедур в специальную секцию exports, например:
exports BubleSort, QuickSort; |
Перечисленные в секции exports процедуры и функции отделяются запятой, а в конце всей секции ставится точка с запятой. Секций exports может быть несколько, и они могут располагаться в программе произвольным образом.
Посмотрим на пример исходного текста простейшей динамически загружаемой библиотеки SortLib (посмотреть приложение).
Пример простейшей динамически загружаемой библиотеки.
library SortLib; procedure BubleSort(var Arr: array of Integer); var I, J, T: Integer;begin for I := Low(Arr) to High(Arr) - 1 do for J := I + 1 to High(Arr) do if Arr[I] > Arr[J] then begin T := Arr[I]; Arr[I] := Arr[J]; Arr[J] := T; end;end;exports BubleSort; begin end. Она содержит единственную процедуру BubleSort, сортирующую массив целых чисел методом «пузырька»:
Исходный текст динамически загружаемой библиотеки заканчивается операторным блоком begin...end, в который можно вставить любые операторы для подготовки библиотеки к работе. Эти операторы выполняются во время загрузки библиотеки основной программой. Наша простейшая библиотека SortLib не требует никакой подготовки к работе, поэтому ее операторный блок пустой.