32 Урока Borland Delphi



              

Урок 14 - часть 3


Экспортирование функций (и процедур ) может производится несколькими способами:

    • по номеру (индексу);
    • по имени.
    В зависимости от этого используется различный синтаксис:

    {экспорт по индексу}

    procedure ExportByOrdinal; export;

    begin

    .....

    end;

    exports

    ExportByOrdinal index 10;

    {экспорт по имени}

    procedure ExportByName; export;

    begin

    .....

    end;

    exports

    ExportByName name 'MYEXPORTPROC'; { имя для экспорта может не совпадать с именем функции ! }
     
     

    Так как в Windows существует понятие "резидентных функций" DLL, то есть тех функций, которые находятся в памяти на протяжении всего времени существования DLL в памяти, в Delphi имеются средства для организации и такого рода экспорта:

    exports

    ExportByName name 'MYEXPORTPROC' resident;
     
     

    Стоит отметить тот факт, что поиск функций, экспортируемых по индексу, производится быстрее, чем при экспорте по имени. С другой стороны, экспорт по имени удобнее, особенно если Вы периодически дополняете и расширяете набор экспортируемых из DLL функций, при гарантии работы приложений, использующих DLL, и не хотите специально следить за соблюдением уникальности и соответствия индексов.

    Если же Вы будете экспортировать функции следующим образом:

    exports

    MyExportFunc1,

    MyExportFunc2,

    .....;

    то индексирование экспортируемых функций будет произведено Delphi автоматически, а такой экспорт будет считаться экспортом по имени, совпадающему с именем функции. Тогда объявление импортируемой функции в приложении должно совпадать по имени с объявлением функции в DLL. Что же касается директив, накладываемых уже на импортируемые функции, то об этом мы поговорим ниже.
     
     

        1. Использование DLL в Delphi (импорт)

        2.  

        Для организации импорта, т.е. доступа к функциям, экспортируемым из DLL, так же как и для их экспорта, Delphi предоставляет стандартные средства.

        Для показанных выше примеров, в Вашей программе следует объявить функции, импортируемые из DLL таким образом:

        { импорт по специфицированному имени }

        procedure ImportByName;external 'MYDLL' name 'MYEXPORTPROC';




        Содержание  Назад  Вперед