Функции LoadLibrary и AfxLoadLibrary
Процессы вызывают LoadLibrary или LoadLibraryEx для явной связи с библиотекой DLL. (Использование приложений MFCAfxLoadLibrary или 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).