Описания external
Описания external позволяют связывать отдельно скомпилиро- ванные процедуры и функции, написанные на языке ассемблера. Опи- сания external позволяют также импортировать процедуры и функции из DLL.
Примечание: Более детальное описания компоновки с программой на языке ассемблера содержится в Главе 25.
директива external ¦ ----------- L->¦ external +T-----------------------------------------------> L-----------¦ -------------------- ^ L>¦строковая константа+T------------------------ L--------------------¦ ------- ----------^ +>¦ name +->¦строковая++ ¦ L------- ¦константদ ¦ L----------¦ ¦ -------- ----------¦ L>¦ index +>¦ целая +- L-------- ¦константа¦ L----------
Директива 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.