Функции LoadLibrary и AfxLoadLibrary
Обновлен: Ноябрь 2007
Процессы вызывают функцию LoadLibrary (или функцию AfxLoadLibrary) для явного связывания с библиотекой DLL. Если вызов завершается успехом, функция сопоставляет указанную библиотеку DLL с адресным пространством вызывающего процесса и возвращает дескриптор библиотеки DLL, который можно использовать с другими функциями для явного связывания, например GetProcAddressи FreeLibrary.
LoadLibrary пытается обнаружить библиотеку DLL с помощью того же метода поиска, который используется для неявного связывания. Если система не может найти библиотеку DLL или функция точки входа возвращает значение FALSE, функция LoadLibrary возвращает значение NULL. Если в вызове функции LoadLibrary указан модуль DLL, уже сопоставленный с адресным пространством вызывающего процесса, функция просто возвращает дескриптор библиотеки DLL и увеличивает счетчик ссылок модуля.
Если у библиотеки DLL есть функция точки входа, операционная система вызывает эту функцию в контексте потока, в котором вызвана функция LoadLibrary. Функция точки входа не вызывается, если библиотека DLL уже присоединена к процессу в результате предыдущего вызова функции LoadLibrary, за которым не последовал вызов функции FreeLibrary.
Приложения MFC, загружающие DLL-библиотеки расширения, должны использовать функцию AfxLoadLibrary вместо LoadLibrary. Функция AfxLoadLibrary обрабатывает синхронизацию потоков перед вызовом LoadLibrary. Интерфейс (прототип) функции AfxLoadLibrary такой же, как у функции LoadLibrary.
Если по какой-то причине системе Windows не удается загрузить библиотеку DLL, процесс может попытаться исправить ошибку. Например, процесс может уведомить пользователя об ошибке и запросить у него другой путь к библиотеке DLL.
Примечание о безопасности. |
---|
Если код запускается под управлением операционных систем Windows NT 4, Windows 2000 или Windows XP (предшествующих пакету обновления SP1), необходимо указывать полный путь для всех библиотек DLL. В этих операционных системах при загрузке файлов в первую очередь поиск идет в текущем каталоге. Если не указать полный путь к файлу, возможно загрузка другого файла. |