Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 202


каталоге, содержащем ехе-файл;

текущем каталоге процесса;

системном каталоге Windows;

каталоге Windows;

каталогах, указанных в PATH.

Попробуйте изменить имя DLL-файла. Вы заметите, что если файл DLL не найден, то система выдает сообщение об этом и немедленно завершает процесс

У неявной компоновки есть свои преимущества и недостатки. По мо­ему мнению, к преимуществам нужно отнести следующее:

программа может ничего не знать о том, что она использует DLL;

проверка доступности DLL производится еще до загрузки программы, т. е. в случае отсутствия DLL программа просто не запустится.

Недостатком такого способа можно считать то, что DLL загружается в память до программы и выгружается после окончания программы, т. е. программист не может управлять загрузкой и выгрузкой библиотек. Если программа использует несколько библиотек, то придется все библиотеки хранить в памяти от запуска до завершения программы. Наверное, иногда

242

неплохо было бы обратиться и к другому способу подключения библио­тек к программе, который называется

ЯВНАЯ ЗАГРУЗКА DLL

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

В winbase.h эти функции описаны следующим образом:

WINBASEAPI HMODULE WINAPI LoadLibraryA(LPCSTR IpLibFileNamc);

WINBASEAPI HMODULE WINAPI LoadLibraryW(LPCWSTR IpLibFileName);

#ifdcf UNICODE

#define LoadLibrary LoadLibraryW

#else

#defme LoadLibrary LoadLibraryA tfendilV/ !UNICODE

WINBASEAPI HMODULE WINAPI LoadLibraryExA(LPCSTR IpLibFileNamc,

HANDLE hFile, DWORD dwFlags);

WINBASEAPI HMODULE WINAPI LoadLibraryExW(LPCWSTR IpLibFileName,

HANDLE hFile, DWORD dwFlags);

#ifdcf UNICODE

#dcflnc LoadLibraryEx LoadLibraryExW

#elsc

#define LoadLibraryEx LoadLibraryExA

#endif // (UNICODE

Аргументом первой функции является имя загружаемой DLL. Другая же при вызове должна получить три аргумента. Первый - то же имя загружаемой DLL. Второй аргумент зарезервирован и должен быть равен NULL. Третий аргумент должен представлять собой либо нуль, либо комбинацию ИЗ трех флагов: DONT_RESOLVE_DLL_REFERENCES, LOADJJBRARY_AS_DATAFILE, LOAD_WITH_ALTI:RED_SEARCH_PATH.




Начало  Назад  Вперед



Книжный магазин