共用方式為


GetModuleFileNameA 函式 (libloaderapi.h)

擷取包含指定模組之檔案的完整路徑。 模組必須已由目前的進程載入。

若要尋找由另一個進程載入之模組的檔案,請使用 getModuleFileNameEx 函式

語法

DWORD GetModuleFileNameA(
  [in, optional] HMODULE hModule,
  [out]          LPSTR   lpFilename,
  [in]           DWORD   nSize
);

參數

[in, optional] hModule

所載入模組的句柄,其路徑正在要求。 如果此參數 NULLGetModuleFileName 會擷取目前進程的可執行文件路徑。

GetModuleFileName 函式不會擷取使用 LOAD_LIBRARY_AS_DATAFILE 旗標載入的模組路徑。 如需詳細資訊,請參閱 LoadLibraryEx

[out] lpFilename

接收模組完整路徑之緩衝區的指標。 如果路徑的長度小於 nSize 參數所指定的大小,則函式會成功,並將路徑傳回為 null 終止的字串。

如果路徑的長度超過 nSize 參數所指定 大小,則函式會成功,並將字串截斷為 nSize 字元,包括終止的 null 字元。

Windows XP:字串會截斷為 nSize 字元,而且不會以 null 結尾。

傳回的字串會使用載入模組時所指定的相同格式。 因此,路徑可以是長或短檔名,而且可以使用前置詞 \\?\。 如需詳細資訊,請參閱 命名檔案

[in] nSize

TCHAR中,lpFilename 緩衝區的大小。

傳回值

如果函式成功,傳回值會是複製到緩衝區的字串長度,以字元為單位,不包含終止的 Null 字元。 如果緩衝區太小而無法儲存模組名稱,字串會截斷為 nSize 字元,包括終止的 null 字元,函式會傳回 nSize,而函式會將最後一個錯誤設定為 ERROR_INSUFFICIENT_BUFFER

Windows XP:如果緩衝區太小而無法儲存模組名稱,函式會傳回 nSize。 最後一個錯誤碼會維持 ERROR_SUCCESS。 如果 nSize 為零,則傳回值為零,而最後一個錯誤碼 ERROR_SUCCESS

如果函式失敗,則傳回值為 0 (零)。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

言論

如果 DLL 在兩個進程中載入,一個進程中的檔名可能會與另一個進程中的檔名不同。

全域變數 _pgmptr 會自動初始化為可執行檔的完整路徑,而且可用來擷取可執行檔的完整路徑名稱。

例子

如需範例,請參閱 安裝服務

注意

libloaderapi.h 標頭會將 GetModuleFileName 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 libloaderapi.h (包括 Windows.h)
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

Dynamic-Link 連結庫函式

GetModuleFileNameEx

GetModuleHandle

LoadLibrary

LoadLibraryEx