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

Директива процедуры export

Если процедуры и функции должны экспортироваться DLL, они

должны компилироваться с директивой компилятора export. Директива

export принадлежит к тому же семейству процедурных директив, что

и near, far, inline и interrupt. Это означает, что директива

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

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

деляющем описании или в опережающем описании.

Директива export делает процедуру или функцию экспортируе-

мой. Она принудительно использует для подпрограммы дальний тип

вызова и подготавливает ее для экспорта, генерируя для процедуры

специальный код входа и выхода. Заметим, однако, что фактический

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

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

Оператор exports

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

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

оператор exports

¦ ---------- ----------------- ----

L-->¦ exports +-->¦ список экспорта+----------->¦ ; +------->

L---------- L----------------- L----

-----------------

список экспорта --T->¦ запись экcпорта+----------->

¦ L----------------- ^

¦ ---- ¦

L------->¦ ; +----------

L----

оператор exports

¦ ----------------

L--->¦ идентификатор +--T------------------------------------

L---------------- ¦ -------- ------------------ ^ ¦

L-->¦ index +->¦ целая константа +-- ¦

L-------- L------------------ ¦

----------------------------------------------------------------

L-T-------------------------------------T---------------------->

¦ ------- ---------------------- ^¦ ----------- ^

L>¦ name +-->¦ строковая константа +--L->¦ resident +---

L------- L---------------------- L-----------

Оператор exports может встречаться в любом месте описатель-

ной части программы или библиотеки и любое число раз. Каждая за-

пись в операторе exports задает идентификатор экспортируемой про-

цедуры или функции. Однако, эта процедура или функция должна опи-

сываться до оператора exports, и ее описание должно содержать ди-

рективу export. Перед идентификатором в операторе exports вы мо-

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

ностью уточненным идентификатором.

Запись экспорта может также включать в себя оператор index,

который состоит из ключевого слова index, за которым следует це-

лочисленное значение в диапазоне от 1 до 32767. Когда задается

оператор index, для экспортируемой процедуры или функции должно

использоваться специальное порядковое значение. Если в записи

экспорта оператор index отсутствует, то порядковое значение прис-

ваивается автоматически.

Запись может содержать оператор name, состоящий из ключевого

слова name, за которым следует строковая константа. При наличии

оператора name экспортируемая процедура или функция должна экс-

портироваться с помощью задаваемого строковой константой имени.

Если оператор name в записи экспорта отсутствует, то процедура

или функция экспортируется по ее идентификатору (символы которого

преобразуются в верхний регистр).

Наконец, запись экспорта может включать в себя ключевое сло-

во resident. При задании ключевого слова resident информация об

экспорте остается в памяти, пока DLL загружена. Параметр resident

существенно уменьшает время поиска подпрограммы в DLL по имени.

Программа может содержать оператор exports, но это встреча-

ется редко, так как Windows не позволяет прикладным программам

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

мами.

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