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 パラメーターで指定されたサイズを超えた場合、関数は成功し、文字列は終端の null 文字を含む nSize 文字に切り捨てられます。
Windows XP: 文字列は nSize 文字に切り捨てられ、null で終わるわけではありません。
返される文字列は、モジュールの読み込み時に指定されたものと同じ形式を使用します。 そのため、パスには長いファイル名または短いファイル名を指定でき、プレフィックス \\?\
を使用できます。 詳細については、ファイルの名前つけに関する記事を参照してください。
[in] nSize
TCHAR での lpFilename バッファーのサイズ。
戻り値
関数が成功した場合、戻り値はバッファーにコピーされる文字列の長さ (終端の null 文字は含まれません) です。 バッファーが小さすぎてモジュール名を保持できなければ、文字列は終端の null 文字を含む nSize 文字に切り捨てられ、関数は nSize を返し、関数は最後のエラーを ERROR_INSUFFICIENT_BUFFERに設定します。
Windows XP: バッファーが小さすぎてモジュール名を保持できる場合、関数は nSize を返します。 最後のエラー コードは ERROR_SUCCESSのままです。 nSize が 0 の場合、戻り値は 0 で、最後のエラー コードはERROR_SUCCESS。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
DLL が 2 つのプロセスで読み込まれる場合、一方のプロセスのファイル名が、もう一方のプロセスのファイル名と異なる場合があります。
グローバル変数 _pgmptr
は、実行可能ファイルの完全なパスに自動的に初期化され、実行可能ファイルの完全なパス名を取得するために使用できます。
例
例については、「 サービスのインストール」を参照してください。
注意
libloaderapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetModuleFileName を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | libloaderapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |