Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Описания interrupt

В описании процедуры перед блоком операторов может указыва-

ется директива interrupt. Процедура в этом случае рассматривает-

ся, как процедура прерывания. Отметим пока, что процедура

interrupt не может вызываться из операторов процедуры, и что каж-

дая процедура interrupt должна определять список параметров, нап-

ример, следующим образом:

procedure MyInt(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS,

ES, BP: Word);

interrupt;

Примечание: Не используйте директиву interrupt при

разработке программ для Windows - это приведет к сбою.

Список параметров не обязательно должен совпадать с указан-

ным синтаксисом - он может быть короче и использовать другие име-

на, но регистры должны передаваться в указанном порядке.

Описание forward

Описание процедуры, содержащее вместо блока операторов ди-

рективу forward, называется опережающим описанием. В каком-либо

месте после этого описания с помощью определяющего описания про-

цедура должна определяться. Определяющее описание - это описание,

в котором используется тот же идентификатор процедуры, но опущен

список формальных параметров и в которое включен блок операторов.

Описание forward и определяющее описание должны присутствовать в

одной и той же части описания процедуры и функции. Между ними мо-

гут описываться другие процедуры и функции, которые могут обра-

щаться к процедуре с опережающим описанием. Таким образом возмож-

на взаимная рекурсия.

Опережающее описание и определяющее описание представляют

собой полное описание процедуры. Процедура считается описанной с

помощью опережающего описания.

Примечание: В интерфейсной части модуля описания

forward не допускаются.

Приведем следующий пример опережающего описания:

procedure Walter(m,n : integer); forward;

procedure Clara(x,y : real);

begin

.

.

.

end;

procedure Walter;

begin

.

.

Clara(8.3, 2.4);

.

.

end;

Определяющее описание процедуры может быть внешним описани-

ем. Однако, оно не может быть внутренним описанием или другим

опережающим описанием. Определяющее описание также не может со-

держать директиву interrupt, описания assembler, near, far,

export, inline или другое описание forward.

Описания 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.

Соседние файлы в предмете Программирование на Pascal