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

Описания near и far

Borland Pascal поддерживает две модели вызова процедур -

ближнюю (near) и дальнюю (far). С точки зрения объема программы и

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

ней связаны ограничения: процедуры типа near могут вызываться

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

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

нее эффективны.

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

зывается в Главе 22 "Вопросы управления".

На основе описания процедуры компилятор будет автоматически

выбирать правильную модель вызова. Для процедур, описанных в ин-

терфейсной части модуля (interface), используется дальняя модель

вызова - их можно вызывать из других модулей. Процедуры, описан-

ные в секции реализации модуля (implementation), имеют ближний

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

ля.

Для некоторых специальных целей может потребоваться исполь-

зовать модель с дальним типом вызова. Например, в оверлейных за-

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

ний тип вызова. Аналогично, если процедура или функция

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

зовать дальний тип вызова. Чтобы переопределить автоматический

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

компилятора {$F+}. Процедуры и функции, компилируемые в состоянии

{$F+}, всегда будут иметь дальний тип вызова (far), а в состоянии

{$F-} компилятор автоматически выбирает корректную модель. По

умолчанию используется директива {$F-}.

Чтобы задать конкретную модель вызова, в описании процедуры

перед ее блоком можно указать директиву near или far. При наличии

такой директивы она переопределяет директиву $F компилятора и ав-

томатический выбор модели вызова.

Описания export

Описание export делает процедуру или функцию экспортируемой,

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

нерировать специальный код входы и выхода из процедуры.

Процедуры и функции должны быть экспортируемыми в следующих

случаях:

* Процедуры и функции экспортируются DLL (динамически компо-

нуемой библиотекой).

* Процедуры и функции системного вызова в программе Windows.

О том, как экспортировать процедуры и функции в DLL, расска-

зывается в Главе 11 "Динамически компонуемые библиотеки". Хотя

процедура и функция компилируется с директивой export, фактичес-

кий экспорт процедуры или функции не происходит, пока подпрограм-

ма не перечисляется в операторе exports библиотеки.

Процедуры и функции системного вызова - это те процедуры и

функции вашей прикладной программы, которые вызываются самой

Windows, а не вашей прикладной программой. Подпрограммы системно-

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

торе exports их перечислять не нужно. Приведем некоторые примеры

процедур и функций системного вызова:

* процедуры Windows;

* диалоговые процедуры;

* процедуры системного вызова для перечисления;

* процедуры уведомления об обращении к памяти;

* специализированные процедуры Windows (фильтры).

Borland Pascal автоматически генерирует для процедур и функ-

ций, экспортируемых программой Windows, эффективные системные вы-

зовы. Эффективные вызовы ослабляют необходимость использования

при создании подпрограмм системного вызова подпрограмм API

Windows MakeProcInstance и FreeProcInstance.

Примечание: См. раздел "Код входа и выхода" в Главе 22.

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