Функция GetModuleHandle


Функция GetModuleHandle извлекает дескриптор указанного модуля, если файл был отображен в адресном пространстве вызывающего процесса.

Чтобы избежать состояний гонки, описанных в разделе Замечаний, используйте функцию GetModuleHandleEx.

Синтаксис

HMODULE GetModuleHandle(
  LPCTSTR lpModuleName);

Параметры

lpModuleName

[in] Указатель на символьную строку с нулем в конце, которая содержит имя модули (или .dll или .exe файл). Если расширение имени файла опускается, в конец добавляется заданное по умолчанию библиотечное расширение .dll. Символьная строка имени файла может включать в себя конечный символ точки (.), который указывает, что имя модуля не имеет расширения. Строка не должна определять путь. Когда определяется путь, убедитесь, что используются обратные слэши (\), а не прямые слэши (/). Имя сравнивается (независимо от ситуации) с именами модулей в текущий момент отображаемыми в адресном пространстве вызывающего процесса.

Если этот параметр - NULL, GetModuleHandle возвращает дескриптор файла, используемый, чтобы создать вызывающий процесс (.exe файл).

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - дескриптор указанного модули.

Если функция завершается ошибкой, возвращаемое значение - NULL. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Замечания

Возвращенный дескриптор - не глобальный или наследуемый. Его нельзя дублировать или использовать другим процессом.

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

Функция GetModuleHandle возвращает дескриптор отображаемого модуля без увеличения на единицу ее итогового числа ссылок. Поэтому, используйте осторожно при передаче дескриптора функции FreeLibrary, потому что такое выполнение может заставить модуль DLL   преждевременно прекратить отображение.

Эта функция должна использоваться тщательно в многопоточном приложении. Нет никакой гарантии, что дескриптор модуля остается допустимым в промежутке времени когда эта функция возвращает дескриптор и, когда он используется. Например, поток извлекает дескриптор модуля, но прежде, чем он использует этот дескриптор, второй поток освобождает модуль. Если система загружает другой модуль, он может  многократно использовать дескриптор модуля, который был недавно освобожден. Поэтому, первый поток получит дескриптор модуля другой, а не предназначенный.

Код примера

Пример, см. в статье  Использование кистей.

Смотри также

Обзор Динамически подключаемые библиотеки (DLL), Функции, используемые DLLFreeLibrary, GetModuleFileName, GetModuleHandleEx

Размещение и совместимость GetModuleHandle

К

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

Реализовано как GetModuleHandleW(Unicode) и GetModuleHandleA(ANSI).

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz