C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[20569] Re:정말 감사합니다..개념이 좀 부족했네요 ^^;;
위경섭 [] 1078 읽음    2002-08-01 01:43
님이 올려주실 글 보구 바루 해보니 잘 되는군요...감사합니다..

김백일 님이 쓰신 글 :
: 위경섭 님이 쓰신 글 :
: : 설명이 좀 애매하더라도 이해해 주시길..
: :
: : 도스모드에서 인자에 따라 도스모드나 윈도우모드로 동작하게 할려고 합니다..
: : 어떤글에 보니까 stub를 이용하는 방법이 있긴한데...
: : 그건 도스모드와 윈도우모드가 완전히 별개라서 힘들구요...
: :
: : 예를들면...볼랜드 소켓서버 같이 만들고 싶습니다..
: :
: : 즉
: : scktsrvr -install 하면 서비스 등록만 해주고 빠져나오고..
: : scktsrvr 하면 윈도우가 뜨죠..
: :
: : 이런식으로요...
: :
: : 설명이 잘 이해 되셨는지 모르겠네요..
: : 더 질문할게 있지만 이 문제가 해결되면 또올리겠습니다. ^^;;
: :
: : 감사 ^^
: :
:
: STUB을 써서 도스용 프로그램을 따로 만드는 것과는 별로 관계가 없습니다.
: 윈도에서는 STUB이 실행이 안되니까요.
:
: 이것은 command-line arguments(or parameters)를 어떻게 처리하느냐의 문제입니다.
:
: 도스용(콘솔용) 프로그램의 main() 함수의 원형은
: int main(int argc, char * argv[])
: 이므로 argc 와 argv[] 배열로 처리하는 건 알고 계실겁니다.
:
: 반면에 윈도 프로그램의 WinMain() 함수의 원형은
: WINAPI WinMain(HINSTANCE hCurInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
: 입니다.
:
: 여기서 lpCmdLine 포인터가 가리키는 문자열 상수가 커맨드라인 전체의 문자열입니다.
: 이것을 적당히 토크나이즈(tokenize)/파싱(parsing)하셔서 처리하시면 됩니다.
: 또는 API 함수인 GetCommandLine() 함수를 사용하셔도 커맨드라인 전체의 문자열을 얻으실 수 있습니다.
:
: WIN32 API만으로 작성된 프로그램이 아니라 VCL/CLX를 쓰신다면,
: lpCmdLine 을 쓰실 수는 없습니다.
: 대신 전역 포인터 변수인 CmdLine을 쓰면 되죠.
: 그러나 이 방법보다는
: main()의 argc와 argv와 비슷한
: ParamCount()와 ParamStr() 함수를 쓰실 것을 권합니다.
: ParamStr()은 char 배열이 아니라 AnsiString을 리턴하기 때문에 훨씬 편리하죠.
:
: 또한 VCL/CLX는 FindCmdLineSwitch()라는 편리한 함수를 지원합니다.
: ParamStr(1), ParamStr(2), ... , ParamStr(ParamCount())가
: "-install"과 "/install"과 같은 커맨드라인 스위치인지를 판별하는 함수도 있죠.
:
: 하여튼 이와 같은 커맨드라인 파싱 루틴을
: WinMain에서 호출하도록 하면 됩니다.
:
: 다음과 같은 WinMain()이 있다면
: WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
: {
:     try
:     {
:          Application->Initialize();
:
:          // 여기서 커맨드라인 파싱 루틴을 호출합니다.
:          // 폼을 생성하지 않고 종료하려면
:          // 여기서 적당한 처리 루틴을 넣은 뒤
:          // Application->Terminate() 등으로 종료해주면 되겠죠.
:
:          Application->CreateForm(__classid(TForm1), &Form1);
:          Application->Run();
:     }
:     catch (Exception &exception)
:     {
:          Application->ShowException(&exception);
:     }
:    
:     return 0;
: }

+ -

관련 글 리스트
20542 [질문] 도스모드 + 윈도우모드 프로그래밍 위경섭 1143 2002/07/30
20555     도스모드(?)는 아니죠. 김백일 1460 2002/07/31
20569         Re:정말 감사합니다..개념이 좀 부족했네요 ^^;; 위경섭 1078 2002/08/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.