Описания external позволяют связывать отдельно скомпилиро-
ванные процедуры и функции, написанные на языке ассемблера. Опи-
сания external позволяют также импортировать процедуры и функции
из DLL.
Примечание: Более детальное описания компоновки с
программой на языке ассемблера содержится в Главе 25.
директива external
│ ┌──────────┐
└─>│ external ├┬───────────────────────────────────────────────>
└──────────┘│ ┌───────────────────┐ ^
└>│строковая константа├┬───────────────────────┘
└───────────────────┘│ ┌──────┐ ┌─────────┐^
├>│ name ├─>│строковая├┤
│ └──────┘ │константа││
│ └─────────┘│
│ ┌───────┐ ┌─────────┐│
└>│ index ├>│ целая ├┘
└───────┘ │константа│
└─────────┘
Директива external, состоящая только из зарезервированного
слова external, используется в сочетании с директивами {$L
имя_файла} для компоновки с процедурами и функциями, реализован-
ными в файлах .OBJ.
Приведем следующие примеры описаний внешних процедур:
procedure MoveWord(var source,dest; count: longint);
external;
procedure MoveLong(var source,dest; count: longint);
external;
procedure FillWord(var dest,data: integer; count: longint);
external;
procedure FillLong(var dest,data: integer; count: longint);
external;
{$L BLOCK.OBJ}
Внешними процедурами следует пользоваться, когда вы хотите
объединить большое количество объектных модулей. Если ваши прог-
раммы имеют небольшой объем, лучше вместо этого использовать
внутренние процедуры.
Директивы external, специфицирующие имя динамически компону-
емой библиотеки (и, возможно, импортируемое имя или порядковый
номер импорта), используются для импорта процедур и функций из
динамически компонуемых библиотек. Например, следующая директива
external импортирует из DLL с именем KERNEL (ядро Windows) функ-
цию с именем GlobalAlloc:
function GlobalAlloc(Flags: Word; Bytes: Longint): THandle;
far; external 'KERNEL' index 15;
В импортируемой процедуре или функции директива external за-
нимает место описания и операторной части. В импортируемых проце-
дурах или функциях должен использоваться дальний тип вызова, за-
даваемый с помощью директивы far в описании процедуры или дирек-
тивы компилятора {$F+}. В остальном импортируемые процедуры и
функции аналогичны обычным процедурам и функциям.
Примечание: Подробнее об импорте функций из DLL расс-
казывается в Главе 11.