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 參數所指定的大小,則函式會成功,且路徑會以 Null 終止的字串傳回。
如果路徑長度超過 nSize 參數所指定的大小,函式會成功,而且字串會截斷為 nSize 字元,包括終止的 Null 字元。
Windowsxp: 字串會截斷為 nSize 字元,而不會以 Null 結尾。
傳回的字串會使用載入模組時所指定的相同格式。 因此,路徑可以是長或短檔名,而且可以使用前置詞 “\?”。 如需詳細資訊,請參閱 命名檔案。
[in] nSize
WCHAR 中 lpFilename 緩衝區的大小。
傳回值
如果函式成功,則傳回值是複製到緩衝區的字串長度,以字元為單位,不包含終止的 Null 字元。 如果緩衝區太小而無法保存模組名稱,字串會截斷為 nSize 字元,包括終止 Null 字元、函式會傳回 nSize,而函式會將最後一個錯誤設定為 ERROR_INSUFFICIENT_BUFFER。
Windowsxp: 如果緩衝區太小而無法保存模組名稱,則函式會傳回 nSize ,而且不會修改最後一個錯誤碼。 如果 nSize 為零,則傳回值為零,且最後一個錯誤碼不會修改。
如果函式失敗,傳回值為 0 (零) 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
如果在兩個進程中載入 DLL,在一個進程中的檔名可能會與其他進程中的檔名不同。
全域變數 _pgmptr
會自動初始化為可執行檔的完整路徑,而且可用來擷取可執行檔的完整路徑名稱。
範例
如需範例,請參閱 安裝服務。
注意
libloaderapi.h 標頭會將 GetModuleFileName 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | libloaderapi.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |