Процедура или функция экспортируется DLL, когда она указыва-
ется в операторе exports библиотеки.
оператор exports
│ ┌─────────┐ ┌────────────────┐ ┌───┐
└──>│ exports ├──>│ список экспорта├───────────>│ ; ├───────>
└─────────┘ └────────────────┘ └───┘
┌────────────────┐
список экспорта ──┬─>│ запись экcпорта├───────────>
│ └────────────────┘ ^
│ ┌───┐ │
└───────>│ ; ├─────────┘
└───┘
оператор exports
│ ┌───────────────┐
└───>│ идентификатор ├──┬────────────────────────────────────┐
└───────────────┘ │ ┌───────┐ ┌─────────────────┐ ^ │
└──>│ index ├─>│ целая константа ├─┘ │
└───────┘ └─────────────────┘ │
┌──────────────────────────────────────────────────────────────┘
└─┬─────────────────────────────────────┬──────────────────────>
│ ┌──────┐ ┌─────────────────────┐ ^│ ┌──────────┐ ^
└>│ name ├──>│ строковая константа ├─┘└─>│ resident ├──┘
└──────┘ └─────────────────────┘ └──────────┘
Оператор exports может встречаться в любом месте описатель-
ной части программы или библиотеки и любое число раз. Каждая за-
пись в операторе exports задает идентификатор экспортируемой про-
цедуры или функции. Однако, эта процедура или функция должна опи-
сываться до оператора exports, и ее описание должно содержать ди-
рективу export. Перед идентификатором в операторе exports вы мо-
жете указать идентификатор модуля с точкой; это называется пол-
ностью уточненным идентификатором.
Запись экспорта может также включать в себя оператор index,
который состоит из ключевого слова index, за которым следует це-
лочисленное значение в диапазоне от 1 до 32767. Когда задается
оператор index, для экспортируемой процедуры или функции должно
использоваться специальное порядковое значение. Если в записи
экспорта оператор index отсутствует, то порядковое значение прис-
ваивается автоматически.
Запись может содержать оператор name, состоящий из ключевого
слова name, за которым следует строковая константа. При наличии
оператора name экспортируемая процедура или функция должна экс-
портироваться с помощью задаваемого строковой константой имени.
Если оператор name в записи экспорта отсутствует, то процедура
или функция экспортируется по ее идентификатору (символы которого
преобразуются в верхний регистр).
Наконец, запись экспорта может включать в себя ключевое сло-
во resident. При задании ключевого слова resident информация об
экспорте остается в памяти, пока DLL загружена. Параметр resident
существенно уменьшает время поиска подпрограммы в DLL по имени.
Программа может содержать оператор exports, но это встреча-
ется редко, так как Windows не позволяет прикладным программам
экспортировать функции, используемые другие прикладными програм-
мами.