Функции LoadLibrary и AfxLoadLibrary

Процессы вызывают LoadLibrary или LoadLibraryEx для явной связи с библиотекой DLL. (Приложения MFC используют AfxLoadLibrary или AfxLoadLibraryEx.) Если функция выполнена успешно, она сопоставляет указанную библиотеку DLL в адресное пространство вызывающего процесса и возвращает дескриптор к библиотеке DLL. Этот идентификатор необходим в других функциях, используемых для явного связывания, например GetProcAddress и FreeLibrary. Дополнительные сведения см. в разделе Явное связывание.

LoadLibrary пытается найти библиотеку DLL, используя ту же последовательность поиска, что и для неявного связывания. LoadLibraryEx обеспечивает более полный контроль над порядком пути поиска. Дополнительные сведения см. в разделе Порядок поиска библиотеки динамической компоновки. Если системе не удается найти библиотеку DLL или функция точки входа возвращает значение FALSE, LoadLibrary возвращает значение NULL. Если в вызове LoadLibrary указан модуль DLL, который уже сопоставлен с адресным пространством вызывающего процесса, функция возвращает дескриптор DLL и увеличивает счетчик ссылок модуля.

Если библиотека DLL имеет функцию точки входа, операционная система вызывает функцию в контексте потока, который вызывал LoadLibrary или LoadLibraryEx. Функция точки входа не вызывается, если библиотека DLL уже присоединена к процессу. Это происходит, если предыдущий вызов LoadLibrary или LoadLibraryEx для библиотеки DLL не имел соответствующего вызова функции FreeLibrary.

Для приложений MFC, которые загружают библиотеки DLL расширения MFC, рекомендуется использовать AfxLoadLibrary или AfxLoadLibraryEx вместо LoadLibrary или LoadLibraryEx. Функции MFC обработают синхронизацию потоков перед явной загрузкой библиотеки DLL. Интерфейсы (прототипы функций) для AfxLoadLibrary и AfxLoadLibraryEx совпадают с LoadLibrary и LoadLibraryEx.

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

Внимание

Обязательно укажите полный путь к любым библиотекам DLL. Текущий каталог может быть просмотрен первым при загрузке файлов с LoadLibrary. Если вы указываете неполный путь к файлу, может быть загружен неправильный файл. При создании DLL используйте параметр компоновщика /DEPENDENTLOADFLAG, чтобы задать порядок поиска статически связанных зависимостей DLL. В ваших DLL используйте полные пути для явной загрузки зависимостей, а также аргументы вызова LoadLibraryEx или AfxLoadLibraryEx для указания порядка поиска модулей. Дополнительные сведения см. в разделах Безопасность библиотеки динамической компоновки (DLL) и Порядок поиска библиотеки динамической компоновки (DLL).

Что вы хотите сделать?

Что вы хотите узнать еще?

См. также