Функция GetModuleHandleEx извлекает дескриптор указанного модуля, если файл был отображен в адресное пространство вызывающего процесса.
Синтаксис
BOOL GetModuleHandleEx( DWORD dwFlags, LPCTSTR lpModuleName, HMODULE* phModule ); |
Параметры
dwFlags
[in] Этот параметр может состоять из одного или нескольких ниже перечисленных значений.Значение | Предназначение |
---|---|
0 | Увеличивается
итоговое число ссылок. Это - заданная
по умолчанию ситуация. Вызывающая программа должна использовать функцию FreeLibrary, когда она закончила использовать дескриптор модуля. |
GET_MODULE_HANDLE_EX_FLAG_PIN | Загрузка
модуля останавливается до тех пор,
пока процесс не завершит работу,
независимо от того сколько раз
вызывается FreeLibrary.
Этот параметр не может использоваться с GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT. |
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT | Итоговое
число ссылок для модуля не
увеличивается. Этот параметр
эквивалентен характеру работы
функции GetModuleHandle. Этот параметр не может использоваться с флажком GET_MODULE_HANDLE_EX_FLAG_PIN. |
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | Параметр lpModuleName - адрес в модуле. |
В конец имени модуля, если расширение имени файла опускается, добавляется заданное по умолчанию библиотечное расширение .dll. Символьная строка имени файла может включать в себя конечный символ точки (.), который указывает, что имя модуля не имеет расширения. Строка не должна определять путь. Когда определяется путь, убедитесь, что используются обратные слэши (\), а не прямые слэши (/). Имя сравнивается (независимо от ситуации) с именами модулей в текущий момент отображаемыми в адресном пространстве вызывающего процесса.
Если этот параметр - ПУСТО (NULL), функцией возвращается дескриптор файла, используемый, чтобы создать вызывающий процесс (.exe файл).
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение не нуль.
Если функция завершается ошибкой, возвращаемое значение равняется нулю. Чтобы получить дополнительную информацию об ошибке, см. GetLastError.
Замечания
Возвращенный дескриптор - не глобальный или наследуемый. Его нельзя дублировать или использовать другим процессом.
Если lpModuleName не включает в себя путь и имеется больше, чем один загруженный модуль с тем же самым базовым именем и расширением, функция извлекает дескриптор модуля, который был загружен сначала.
Если dwFlags содержит GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, используйте осторожно при передаче дескриптора функции FreeLibrary, потому что такое выполнение может заставить модуль DLL преждевременно прекратить отображение.
Если dwFlags содержит GET_MODULE_HANDLE_EX_UNCHANGED_REFCOUNT, эта функция должна осторожно использоваться во многопоточном приложении. Нет никакой гарантии, что дескриптор модуля остается допустимым в промежутке времени когда эта функция возвращает дескриптор и, когда он используется. Например, поток извлекает дескриптор модуля, но прежде, чем он использует этот дескриптор, второй поток освобождает модуль. Если система загружает другой модуль, он может многократно использовать дескриптор модуля, который был недавно освобожден. Поэтому, первый поток получит дескриптор модуля другой, а не предназначенный.
Чтобы компилировать приложение, которое использует эту функцию, определите макрос _WIN32_WINNT как 0x0501 или позже. Дополнительную информацию, см. Использование заголовочных файлов Windows.
Смотри также
Обзор Динамически подключаемые библиотеки (DLL), Функции, используемые DLL, FreeLibrary, GetModuleFileName
Размещение и совместимость GetModuleHandleEx |
||
К |
Windows XP |
Да |
л |
Windows 2000 |
Нет |
и |
Windows NT |
Нет |
е |
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 |
Нет |
|
Замечания по платформе |
Не имеется |