* Библиотеки .dll часто используются одновременно несколькими программами.
* Библиотека .dll может быть написана и откомпилирована на одном языке, а обращаться к ней можно из программ, написанных на других языках. Например, программа на PascalABC.NET может вызывать функцию из библиотеки, созданной на языке C# и наобороот. Таким образом, библиотеки обеспечивают
Структура библиотеки
Библиотека имеет практически ту же структуру, что и модуль:
library имя библиотеки;
interface
раздел интерфейса
implementation
раздел реализации
end.
Имя библиотеки должно совпадать с именем pas-файла, в котором библиотека находится.
Имеется также упрощенный синтаксис библиотек - без разделов интерфейса и реализации, совпадающий с упрощенным синтаксисом модулей (за исключением заголовка).
В результате компиляции библиотеки в текущем каталоге создаётся .dll-файл, содержащий откомпилированную библиотеку.
Для подключения библиотеки к основной программе используется директива компилятора {$reference ИмяБиблиотеки}. Например:
{$reference ABC.dll}
{$reference ABC1.dll}
begin
writeln(a.GetType);
end.
Подключение библиотеки может проводиться в любом месте исходного файла.
Библиотеки ABC и ABC1 имеют соответственно вид:
library ABC;
var a: integer;
end.
и
library ABC1;
var a: real;
end.
В первую очередь имя ищется в исходном модуле, затем в модулях, подключенных в разделе uses в порядке справа налево, и только потом - в подключенных библиотеках в порядке подключения.
Согласно этому правилу в примере из предыдущего пункта переменная a будет иметь тип integer.
В случае коллизии имен используемое имя можно предварять именем библиотеки с последующей точкой:
{$reference ABC.dll}
{$reference ABC1.dll}
begin
writeln(ABC1.a.GetType);
end.
Документирующие комментарии
Можно помечать заголовки процедур, функций, методов, имена классов, типов, констант и переменных так называемыми документирующими комментариями. Документирующие комментарии всплывают в подсказках редактора при наведении курсора мыши на слово, при открытии скобки после имени подпрограммы и при выборе поля из списка полей, выпадающих при нажатии точки после имени. Система всплывающих подсказок в редакторе получила название Intellisense.
Документирующий комментарий располагается на строчке, предшествующей помечаемому объекту, и начинается с символов ///. Например:
const
/// Константа Pi
Pi = 3.14;
type
/// TTT - синоним целого типа
TTT = integer;
/// Документирующий комментарий класса XXX
XXX = class
end;
/// Документирующий комментарий процедуры p
procedure p(a : integer);
begin
end;
var
/// Документирующий комментарий переменной t1
t1: TTT;
Документирующие комментарии могут занимать несколько строк, каждая из которых должна начинаться с /// . Для комментирования подпрограмм можно использовать в первой строке документирующий комментарий ///-, тогда его содержимое меняет заголовок подпрограммы в подсказке при наведении курсора мыши. Например:
///- Exclude(var s : set of T; el : T)
///Удаляет элемент el из множества s
procedure Exclude(var s: TypedSet; el: object);
Если первая строка документирующего комментария имеет вид ///--, то подсказка не всплывает. Это делается для элементов, которые хочется скрыть от системы всплывающих подсказок.
Классы
Обзор классов и объектов
Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств. Описание класса имеет вид:
type
имя класса = class
секция1
секция2
...
end;
Каждая секция имеет вид:
модификатор доступа
описания полей
объявления или описания методов и описания свойств
Модификатор доступа в первой секции может отсутствовать, при этом подразумевается модификатор internal (видимость всюду внутри сборки).
Методы могут описываться как внутри, так и вне класса. При описании метода внутри класса его имя предваряется именем класса с последующей точкой. Например: