[WinAPI] CommandLine 사용하기

아래와 같이 프로젝트 속성에서 명령 인수를 사용하면 쉽게 command를 전달할 수 있습니다.

C, C++에서 CommandLine을 사용할 때, main의 인자값인 int argc, char *argv[]를 사용합니다.

콘솔기반 C, C++에서는 아래와 같이 사용합니다.

void main( int argc, char *argv[] )
{
	cout << "argc  : " << argc << endl;

	for( int i = 0; i < argc; i++ )
		cout << "i  : " << i  << ", argv : " << argv[i] << endl;

	system( "pause" );
}

위 코드의 실행 결과는 아래와 같습니다.

Command가 있건 없건 0번째 인자에는 프로그램의 실행경로가 나오고, 그 이후부터 입력한 명령줄이 나옵니다.

MFC에서는 아래 두가지 방법 중 하나를 선택하시면 됩니다.
MFC 프로젝트에도 아래와 같이 명령 인수에 값을 먼저 넣어줍니다.

첫번째 방법은__argc, __targv를 사용하는 방법입니다.

int iCnt = __argc;                                   // 5

CString str0( __targv[0] );                       // d:\TEMP\CmdTest\Debug\CmdTest.exe
CString str1( __targv[1] );                       // abc
CString str2( __targv[2] );                       // test
CString str3( __targv[3] );                       // 123
CString str4( __targv[4] );                       // 가나

CString sMsg;
sMsg.Format( _T( "iCnt : %d\n%s\n%s\n%s\n%s\n%s" ), iCnt, str0, str1, str2, str3, str4 );
AfxMessageBox( sMsg );

두번째 방법은 GetCommandLine를 사용하는 방법입니다.

int iCnt = 0;
LPWSTR* pStr = NULL;
LPCWSTR lpcwstr = ::GetCommandLine();
pStr = ::CommandLineToArgvW( lpcwstr, &iCnt );

CString sMsg;
sMsg.Format( _T( "iCnt : %d" ), iCnt );
for ( int i = 0; i < iCnt; i++ )
{
	CString str;
	str.Format( _T( "\n%s" ), pStr[i] );  //배열 처럼 쓸수있다. // pStr[0]은 실행파일. 1번부터가 인자
	sMsg += str;
}
LocalFree( pStr );
AfxMessageBox( sMsg );

위 두 방법 모두 아래와 같이 출력됩니다.

이상으로 명령 인자 사용법 알아봤습니다.