ВУЗ:
Составители:
Рубрика:
Динамический импорт менее удобен и требует существенно больших
усилий при реализации. Но есть и достоинства: более эффективно
используется память; программа получает полный контроль над подключением
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
Страницы
- « первая
- ‹ предыдущая
- …
- 157
- 158
- 159
- 160
- 161
- …
- следующая ›
- последняя »
