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월


Posted by window31


트랙백 보낼 주소 : http://window31.com/trackback/19 관련글 쓰기

댓글을 달아주세요

  1. 2007/06/09 02:15
    댓글 주소 수정/삭제 댓글
    ㅋ.. m_lpCmdLine 을 문자열 데이터로 변환한뒤..
    파싱에서 사용하면.. 다중옵션도..ㅋ
    (뭐.. 그만큼 손이야 더 가겠지만..ㅋㅋ)
  2. 2007/06/09 22:27
    댓글 주소 수정/삭제 댓글
    그럴바야에 걍 GetCommandLine을 쓰겠다는 :p
  3. Ggil
    2007/07/28 12:29
    댓글 주소 수정/삭제 댓글
    크크.. __argv 이런거 쓰면 더간단합니다. 이거때문에 삽질을좀해서^^
  4. 2007/07/28 22:42
    댓글 주소 수정/삭제 댓글
    이미 다 옵션화 했다. ㅎㅎ

BLOG main image
by window31

카테고리

분류 전체보기 (281)
Reverse Engineering (21)
C, C++ (20)
Kernel (8)
Guitar (19)
잡담 (77)
etc (8)
who am i (8)
보안 이야기 (88)
Tools (3)
월간 마이크로소프트웨어/그.. (28)

글 보관함