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


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


DONT_RESOLVE_DLL_REFERENCES

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

243

LOAD LIBRARY_AS_DATAFILE

Этот флаг может использоваться в нескольких случаях. Во-первых, можно загружать библиотеку, не содержащую никакого кода и содержа­щую только ресурсы. Полученное значение HINSTANCE можно исполь­зовать при вызове функций, использующих ресурсы. Во-вторых, если мы загружаем ехе-файл обычным способом, то это приводит к запуску нового процесса. А как быть в том случае, если мы хотим получить доступ к ресурсам ехе-файла, не запуская его? При загрузке ехе-файла с помощью функции LoadLibraryExQ с установленным флагом LOAD_LIBRARY_AS_DATAFILE, возможно получить доступ к ресур­сам ехе-файла.

LOAD_WITH__ALTERED_SEARCH_PATH

Ранее мы рассмотрели, какие каталоги и в какой последовательности просматриваются системой при загрузке DLL. Если установлен флаг LOAD_WITH_ALTERED_SEARCH_PATH, то просмотр каталогов начинается с каталога, указанного в первом аргументе функции LoadLibraryExQ. Далее просмотр продолжается в обычном порядке.

После загрузки DLL программа не может вызывать требующиеся ей функции. Дня того чтобы вызвать какую-либо функцию, ей необходимо сначала определить адрес этой функции с помощью GetProcAddressQ, a затем вызывать функцию через полученный адрес. После того, как на­добность в присутствии DLL в памяти отпала, программа должна выгру­зить ее с помощью функций FreeLibrary() или FreeLibraryAndExitThread(). Но сейчас разговор не об этом. Давайте попробуем рассмотреть преды­дущий пример, измененный таким образом, чтобы DLL загружалась явно.

Само собой разумеется, что все, что касается DLL, никаким изменени­ям не подвергалось. Иначе какой смысл писать DLL, если в зависимости от потребностей программиста ее нужно было бы каждый раз переписы­вать? Изменился только основной файл программы, которая вызывает функцию из DLL. Итак...




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



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