Справочное руководство по Delphi

       

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


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

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

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

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

    procedure ImportByOrdinal; external 'MYDLL' index 10;

    { импорт по оригинальному имени }

    procedure MyExportFunc1; external 'MYDLL';

    Этот способ называется статическим импортом.

    Как Вы могли заметить, расширение файла, содержащего DLL, не указывается - по умолчанию подразумеваются файлы *.DLL и *.EXE. Как же тогда быть в случае, если файл имеет другое расширение (например, как COMPLIB.DCL в Delphi), или если требуется динамическое определение DLL и импортируемых функций (например, Ваша программа работает с различными графическими форматами, и для каждого из них существует отдельная DLL.)?

    Для решения такого рода проблем Вы можете обратиться напрямую к API Windows, используя, так называемый, динамический импорт:

    uses

    WinTypes, WinProcs, ... ;



    type

    TMyProc = procedure ;

    var

    Handle : THandle;

    MyImportProc : TMyProc;

    begin

    Handle:=LoadLibrary('MYDLL');

    if Handle>=32 then { if <=32 - error ! }

    begin

    @MyImportProc:=GetProcAddress(Handle,'MYEXPORTPROC');

    if MyImportProc<>nil then

    ...... {using imported procedure}

    end;

    FreeLibrary(Handle);

    end;

    !!! Синтаксические диаграммы объявлений экспорта/импорта, подмена точки выхода из DLL, и другие примеры, Вы можете найти в OnLine Help Delphi, Object Pascal Language Guide, входящему в Borland RAD Pack for Delphi, и, например, в книге "Teach Yourself Delphi in 21 Days".

    Если не говорить о генерируемом компилятором коде (сейчас он более оптимизирован), то все правила синтаксиса остались те же , что и в Borland Pascal 7.0



    Содержание раздела