Понятие вспомогательной функции
Обновлен: Ноябрь 2007
Вспомогательная функция для отложенной загрузки, поддерживаемой компоновщиком, фактически загружает библиотеки DLL во время выполнения. Вспомогательную функцию можно изменять, чтобы настроить ее поведение. Для этого вместо того, чтобы использовать вспомогательную функцию, предоставленную в файле Delayimp.lib, следует написать собственную функции и выполнить ее привязку к программе. Одна вспомогательная функция обслуживает все отложенные загрузки библиотек DLL.
Можно создать собственную версию вспомогательной функции, если необходимо выполнить специальную обработку на основе имен библиотек DLL или импортированных частей.
Вспомогательная функция выполняет следующие действия:
Сопоставление хранимого дескриптора с библиотекой на предмет завершения загрузки библиотеки
Вызов метода LoadLibrary для загрузки библиотеки DLL
Вызов метода GetProcAddress для получения адреса процедуры
Возврат к преобразователю отложенной загрузки импортированных частей для вызова загружаемой в данный момент точки ввода
Вспомогательная функция может выполнять обратный вызов перехватчика уведомлений в программе после выполнения любого из следующих действий:
При запуске вспомогательной функции
Перед вызовом метода LoadLibrary вспомогательной функции
Перед вызовом метода GetProcAddress вспомогательной функции
При сбое вызова метода LoadLibrary вспомогательной функции
При сбое вызова GetProcAddress вспомогательной функции
После того как вспомогательная функция завершила обработку
Каждая из данных точек перехвата может возвращать значение, которое способно изменить стандартную обработку вспомогательной программой; за исключением возврата к преобразователю отложенной загрузки импортированных частей.
Вспомогательный код по умолчанию находится в файлах Delayhlp.cpp и Delayimp.h (в папке vc\include) и компилируется в Delayimp.lib (в папке vc\lib). Данную библиотеку необходимо включать в компиляции, если только не используется собственная вспомогательная функция.
Описание вспомогательной функции приведено в следующих подразделах: