Функция GetModuleFileNameW (libloaderapi.h)
Извлекает полный путь для файла, содержащего указанный модуль. Модуль должен быть загружен текущим процессом.
Чтобы найти файл для модуля, загруженного другим процессом, используйте функцию GetModuleFileNameEx .
Синтаксис
DWORD GetModuleFileNameW(
[in, optional] HMODULE hModule,
[out] LPWSTR lpFilename,
[in] DWORD nSize
);
Параметры
[in, optional] hModule
Дескриптор загруженного модуля, путь к которому запрашивается. Если этот параметр имеет значение NULL, GetModuleFileName извлекает путь к исполняемому файлу текущего процесса.
Функция GetModuleFileName не получает путь к модулям, загруженным с помощью флага LOAD_LIBRARY_AS_DATAFILE . Дополнительные сведения см. в разделе LoadLibraryEx.
[out] lpFilename
Указатель на буфер, получающий полный путь к модулю. Если длина пути меньше размера, указанного параметром nSize , функция завершается успешно, и путь возвращается в виде строки с пустым завершением.
Если длина пути превышает размер, заданный параметром nSize , функция завершается успешно, а строка усекается до символов nSize , включая символ null конца.
Windows XP: Строка усекается до символов nSize и не заканчивается null.
Возвращаемая строка будет использовать тот же формат, который был указан при загрузке модуля. Таким образом, путь может быть длинным или коротким именем файла и может использовать префикс "\?". Дополнительные сведения см. в разделе Именование файла.
[in] nSize
Размер буфера lpFilename в WCHAR.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение представляет собой длину строки, копируемых в буфер, в символах, не включая завершающий символ NULL. Если буфер слишком мал, чтобы вместить имя модуля, строка усекается до символов nSize , включая завершающий символ NULL, функция возвращает nSize, а функция задает последней ошибке значение ERROR_INSUFFICIENT_BUFFER.
Windows XP: Если буфер слишком мал для хранения имени модуля, функция возвращает nSize , а последний код ошибки не изменяется. Если nSize равно нулю, возвращаемое значение равно нулю и код последней ошибки не изменяется.
Если функция завершается сбоем, возвращаемое значение равно 0 (ноль). Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Если библиотека DLL загружается в два процесса, имя файла в одном процессе может отличаться от имени файла в другом процессе.
Глобальная переменная _pgmptr
автоматически инициализируется полным путем к исполняемому файлу и может использоваться для получения полного пути к исполняемому файлу.
Примеры
Пример см. в разделе Установка службы.
Примечание
Заголовок libloaderapi.h определяет GetModuleFileName как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | libloaderapi.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |