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

Использование dll

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

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

external. Например, в следующем описании из DLL и именем KERNEL

(ядро Windows) импортируется функция с именем GlobalAlloc:

function GlobalAlloc(Glags: Word; Bytes: Longint): THandle;

far; external 'KERNEL' index 15;

В импортируемой процедуре или функции директива external за-

нимает место описательной и операторной части, которые нужно было

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

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

ключевым словом far или директивой компилятора {$F+}; во всем ос-

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

Borland Pascal импортирует процедуры и функции тремя спосо-

бами:

- по имени;

- по новому имени;

- по порядковому номеру.

Формат директив external для каждого из трех методов показан

в приведенном ниже примере.

Когда оператор index или name не указан, процедура или функ-

ция экспортируются по имени. Это имя совпадает с идентификатором

процедуры или функции. В данном примере процедура ImportByName

импортируется из библиотеки 'TESTLIB' по имени 'IMPORTBYNAME':

procedure ImportByName; external 'TESTLIB';

Когда задан оператор name, процедура или функция импортиру-

ется под именем, отличным от имени идентификатора. В следующем

примере процедура ImportByName импортируется из библиотеки

'TESTLIB' по имени 'REALNAME':

procedure ImportByName; external 'TESTLIB'name 'REALNAME'

Наконец, при наличии оператор index процедура или функция

импортируется по порядковому значению. Такой вид импорта уменьша-

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

имени в таблице имен DLL. В следующем примере процедура

ImportByOrd импортируется из библиотеки 'TESTLIB':

procedure ImportByOrd; external 'TESTLIB' index 5;

Имя DLL задается после ключевого слова external, а новое

имя, заданное в операторе name, не обязано представлять собой

строковые литералы. Допускается любое строковое выражение-конс-

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

index, может быть любым целочисленным выражением-константой.

const

TestLib = TestLib;

Ordinal = 5;

procedure ImportByName; external TestLib;

procedure ImportByName; external TestLibname 'REALNAME'

procedure ImportByOrd; external TestLib index Ordinal;

Хотя DLL может содержать переменные, импортировать их в дру-

гие модули невозможно. Любой доступ к переменным DLL должен осу-

ществляться через процедурный интерфейс.

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