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