[WinAPI] 내 경로 얻기, GetModuleFileName

간혹 개발을 하다보면, 현재 실행하고있는 내 프로그램의 경로를 알아야 할 때가 있는데, 그럴 때 GetModuleFileName 함수를 사용하면 쉽게 알아낼 수 있습니다.

GetModuleFileName의 원형은 아래와 같습니다.

DWORD GetModuleFileName( HMODULE hModule, LPSTR lpFilename, DWORD nSize );

필요한 헤더파일은 아래와 같습니다.

#include <libloaderapi.h>

매개 변수에 대한 설명은 아래와 같습니다.

  • HModule hModule: 경로가 요청되는 모듈에 대한 핸들입니다. NULL이면 현재 프로세스의 실행 파일 경로를 요청합니다.
  • LPSTR lpFilename: 경로를 받는 버퍼에 대한 포인터입니다.
  • DWORD nSize: 경로를 받는 버퍼의 크기입니다.

함수가 성공하면 반환 값은 버퍼에 복사되는 문자열의 길이입니다.
함수가 실패하면 반환값은 0이고, 확장 정보는 GetLastError에서 알 수 있습니다.

예시 코드는 아래와 같습니다.

TCHAR szFullPathName[MAX_PATH] = { 0, };
DWORD dwRes = ::GetModuleFileName( (HMODULE)&__ImageBase, szFullPathName, sizeof( szFullPathName ) );
sFileName.Format( _T( "%s" ), szFullPathName );

실제 실행한 모습입니다.