아래와 같이 프로젝트 속성에서 명령 인수를 사용하면 쉽게 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 );
위 두 방법 모두 아래와 같이 출력됩니다.
이상으로 명령 인자 사용법 알아봤습니다.