TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Использование 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 должен осу-
        ществляться через процедурный интерфейс.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz