MFC에서 커맨드라인 이용
처음 만들기 시작할 땐 콘솔용이었다.
그래서 printf 남발로 디자인하는 반가운 텍스트 UI를 만들고, 버전관리를 하고
기능을 구현하여 겨우 완료를 했는데
다음 프로젝트는 그것을 GUI버전으로 바꾸는 것이었다 ;
그래서 화면 인터페이스를 만들고, 맨날 젬병이라고 외치는 MFC로 삽질하고 해서
대략 다시 또 완료를 하고 커널 모듈도 완성되어 탑재한후 베포를 했는데,
오늘 콘솔용 모듈도 만들어달라는 요청이 들어왔다 ;;;
어쨌든 머 시키는대로 해야 하니 ;; 첨에 든 생각은 define을 사용해서 빌드할 때마다
구분을 해서 모듈을 제작할까 했는데, MFC이기도 해서 그짓을 하려면 심하게
리펙토링을 해야 하고 머 삽질이 많아보였는데 좀더 생각해보니 굳이 그럴 필요 없었다.
UI가 있더라도 콘솔 프로그램처럼 동작하기만 하면 그만. 파라메타로 가동을 시키고,
동작 완료후에는 스스로 종료하게 만들면 간단하다.
파라메타 추출 코드는 GetCommandLine()밖에 떠오르는게 없었지만, 스트링 나누고
포인터 자리 뽑아오고 귀찮기도 하고, MFC에도 당근 기능을 제공할 것이다 하고 찾아본
결과, 역시 있었다 :) CWinApp 클래스의 m_lpCmdLine가 바로 그것~!
OutputDebugString(m_lpCmdLine); 해서 결과를 보면 파라메타가 잘 보인다.
단, argv[1] 은 출력되지만, argv[2]는 나오지 않았다... 공백 포함 파라메타가 두개 이상은
사용하지 못한다는 ;;
하지만 간단한 해결 방법이 있다. 인자를 붙히는 꽁수를 쓰면 된다. a:모든 파일, k:커널 모드
머 이런식으로 해서 처리가능하다.
c:\fuck project>fuck.exe /ak
// example code
if (_tcsstr(m_lpCmdLine, "a"))
{
bAllFile = true;
.....
if (_tcsstr(m_lpCmdLine, "ak"))
{
bKernelMode = true;
bAllFile = true;
....
}
너무 별거 아닌 팁이지만, m_lpCmdLine을 발견한것이 반가워서 한번 끄적거려 봤다. :p
2007년 5월
