Разработка приложений в системе Delphi. Шейкер Т.Д. - 159 стр.

UptoLike

Составители: 

Динамический импорт менее удобен и требует существенно больших
усилий при реализации. Но есть и достоинства: более эффективно
используется память; программа получает полный контроль над подключением
DLL-библиотек. Например, если окажется, что вызываемая подпрограмма
отсутствует, то есть возможность обработать ошибку и принять
соответствующее решение. Более того, обеспечивается возможность
организации работы с библиотекой, которой не существует на момент
компиляции приложения. Загрузка DLL выполняется функцией:
LoadLibrary(LibFileName:PChar):HModule;
где LibFileNameстрока, содержащая имя библиотеки. Если загрузить
библиотеку не удалось, то функция возвращает код ошибкичисло в
диапазоне от 0 до 32.
При завершении работы с библиотекой используется функция
FreeLibrary(LibModule: HModule):Boolean;
где LibModuleдескриптор DLL-библиотеки, возвращённый функцией
LoadLibrary.
Таким образом, при работе с библиотекой потребуется переменная типа
HModule для хранения дескриптора библиотек. После загрузки DLL можно
воспользоваться функцией:
GetProcAddress(Module: HModule; ProcName:PChar):Pointer;
где Moduleдескриптор загруженного dll-модуля;
ProcNameимя или целочисленный индекс подпрограммы,
экспортируемой библиотекой.
Если подпрограмма вызывается по имени, то в параметре
ProcName
передаётся указатель на нуль-терминальную строку, содержащую имя
подпрограммы. Если используется номер, то в двух младших байтах
ProcName
передаётся индекс, а старшие два байта должны быть равны нулю.
Результатуказатель на точку входа в экспортируемую подпрограмму.
Если при вызове по имени окажется, что подпрограммы не существует, то
159
    Динамический импорт менее удобен и требует существенно больших
усилий при реализации. Но есть и достоинства: более эффективно
используется память; программа получает полный контроль над подключением
DLL-библиотек. Например, если окажется, что вызываемая подпрограмма
отсутствует,   то   есть    возможность        обработать   ошибку     и   принять
соответствующее     решение.     Более     того,    обеспечивается     возможность
организации работы с библиотекой, которой не существует на момент
компиляции приложения. Загрузка DLL выполняется функцией:
LoadLibrary(LibFileName:PChar):HModule;

    где LibFileName – строка, содержащая имя библиотеки. Если загрузить
библиотеку не удалось, то функция возвращает код ошибки – число в
диапазоне от 0 до 32.
    При завершении работы с библиотекой используется функция
FreeLibrary(LibModule: HModule):Boolean;

    где LibModule – дескриптор DLL-библиотеки, возвращённый функцией
LoadLibrary.
    Таким образом, при работе с библиотекой потребуется переменная типа
HModule для хранения дескриптора библиотек. После загрузки DLL можно
воспользоваться функцией:
GetProcAddress(Module: HModule; ProcName:PChar):Pointer;

    где Module – дескриптор загруженного dll-модуля;
    ProcName – имя         или    целочисленный         индекс       подпрограммы,
    экспортируемой библиотекой.
    Если подпрограмма вызывается по имени, то в параметре ProcName
передаётся указатель на нуль-терминальную строку, содержащую имя
подпрограммы. Если используется номер, то в двух младших байтах ProcName
передаётся индекс, а старшие два байта должны быть равны нулю.
    Результат – указатель на точку входа в экспортируемую подпрограмму.
Если при вызове по имени окажется, что подпрограммы не существует, то


                                         159