TURBO PASCAL |
Новости
|
Использование 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 должен осу- ществляться через процедурный интерфейс. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |