Поделиться через


Функция 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

См. также

Функции библиотеки динамической компоновки

GetModuleFileNameEx

GetModuleHandle

LoadLibrary

LoadLibraryEx