Функция LoadLibrary отображает заданный исполняемый модуль в адресное пространство вызывающего процесса.
Чтобы загрузить дополнительные параметры, используйте функцию LoadLibraryEx.
Синтаксис
HMODULE LoadLibrary( LPCTSTR lpFileName ); |
Параметры
lpFileName
[in] Указатель на символьную строку с нулем в конце, которая именует исполняемый модуль (или .dll или .exe файл). Указанное имя - это имя файла модуля и оно не связано с именем самого сохраняемого в библиотеке модуля, как это определено ключевым словом LIBRARY в (.def) файле определения модуля.Если строка определяет путь, но файл не существует в указанном каталоге, функция завершается ошибкой. Когда определяется путь, убедитесь, что использованы наклонные черты влево(обратные слэши (\)), а не прямые слэши (/).
Если символьная строка не определяет путь, функция использует стандартную стратегию поиска файла. Дополнительную информацию см. в разделе Замечания.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор модуля.
Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Windows Me/98/95: Если Вы используете LoadLibrary, чтобы загрузить модуль, который содержит ресурс, числовой идентификатор которого больше, чем 0x7FFF, LoadLibrary завершается ошибкой. Если Вы пытаетесь загрузить 16-разрядную DLL непосредственно из 32-разрядного кода, LoadLibrary завершается ошибкой. Если Вы пытаетесь загрузить DLL, подсистемная версия которой больше чем 4.0, LoadLibrary завершается ошибкой. Если ваша функция DllMain пробует вызывать, Unicode версию функции, LoadLibrary завершается ошибкой.Замечания
Чтобы разрешить или запретить отображение на экране сообщений об ошибке, загрузчиком в ходе загрузки DLL, используйте функцию SetErrorMode.
LoadLibrary может быть использована чтобы отобразить модуль DLL и возвратить дескриптор, который может использоваться в функции GetProcAddress, чтобы получить адрес функции DLL. LoadLibrary может также использоваться, чтобы проецировать другие исполняемые модули. Например, функция может определить .exe файл, чтобы получить дескриптор, который может быть использован в функциях FindResource или LoadResource. Однако, не используйте LoadLibrary, чтобы запустить .exe файл, использующий функцию CreateProcess.
Если модуль - DLL, еще не отображенная для вызывающего процесса, система вызывает функцию DllMain DLL со значением DLL_PROCESS_ATTACH. Если DllMain возвращает значение ИСТИНА (TRUE), LoadLibrary возвращается успешно. Если DllMain возвращает значение ЛОЖЬ (FALSE), система выгружает DLL из адресного пространства процесса, а LoadLibrary возвращает значение ПУСТО (NULL).
Вызов LoadLibrary из DllMain - не безопасен. Дополнительную информацию смотри в описании функции DllMain в разделе Замечания.
Дескрипторы модуля - не глобальные или наследуемые. Вызов LoadLibrary одним процессом не создает дескриптор, который другой процесс может использовать - например, в вызове функции GetProcAddress. Другой процесс должен сделать свой собственный вызов LoadLibrary для модуля перед вызовом GetProcAddress.
Если lpFileName не включает в себя путь и имеется больше, чем один загруженный модуль с одним и тем же базовым именем и расширением, функция возвращает дескриптор модуля, который был загружен сначала.
Если расширение имени файла в параметре lpFileName не определено, в конец добавляется заданное по умолчанию библиотечное расширение .dll. Однако, символьная строка имени файла может включать в себя конечный символ точки (.), который указывает, что имя модуля не имеет расширения. Когда определяется путь, функция ищет загруженные модули, базовое имя которых соответствует базовому имени модуля, который загружается. Если имя соответствует, загрузка завершается успешно. В противном случае функция ищет файл. Порядок поиска используется в зависимости от установленного значения в HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode.
Windows 2000/NT, Windows Me/98/95: Значение SafeDllSearchMode не существует.Если SafeDllSearchMode равно 1 (это по умолчанию), порядок поиска происходит как указано ниже:
Если SafeDllSearchMode равно 0, порядок поиска происходит как указано ниже:
Первый найденный каталог - это каталог, содержащий загрузочный модуль (PE-файл), используемый, чтобы создать вызывающий процесс (дополнительную информацию смотри в описании функции CreateProcess). Такое выполнение дает возможность файлы отдельных динамически подключаемых библиотек (DLL), для поиска связать с процессом, не добавляя установленный каталог процесса в переменную окружения PATH.
Путь поиска может быть изменен использованием функция SetDllDirectory. Этот метод решения рекомендуется вместо того, чтобы использовать SetCurrentDirectory или жесткое кодирование полного пути к DLL.
Если путь определяется и есть файл переназначения для приложения, функция ищет модули в каталоге приложения. Если модуль в каталоге приложения существует, LoadLibrary игнорирует заданный путь и загружает модуль из каталога прикладной программы. Если модуль в каталоге прикладной программы не существует, LoadLibrary загружает модуль из указанного каталога. Дополнительную информацию, см. в статье Переназначение динамически загружаемой библиотеки.
Если Вы вызываете LoadLibrary с именем блока без определения пути, а блок внесен в список в системную декларацию совместимости, вызов автоматически переадресуется в параллельный блок.
Компилятор Visual C++ поддерживает синтаксис, который дает возможность Вам, чтобы объявить локальные для потока переменные: _declspec (thread). Если Вы используете этот синтаксис в DLL, то будете не в состоянии загрузить DLL, явно используя LoadLibrary или LoadLibraryEx. Если ваша DLL, должна быть загружена явно, Вы должны использовать функции локальной памяти потока (TLS) вместо _declspec (thread).
Код примера
Пример, см. в статье Использование динамического связывания периода выполнения.
Смотри также
Обзор Динамически подключаемые библиотеки (DLL), Функции, используемые DLL, DllMain, FindResource, FreeLibrary, GetProcAddress, GetSystemDirectory, GetWindowsDirectory, LoadLibraryEx, LoadResource, SetDllDirectory, SetErrorMode
Размещение и совместимость LoadLibrary |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
Windows Me |
Да |
н |
Windows 98 |
Да |
т |
Windows 95 |
Да |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
Реализовано как LoadLibraryW(Unicode) и LoadLibraryA(ANSI). |
|
Замечания по платформе |
Не имеется |