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
[20436] Re:[질문] 도스프로그램의 리턴값을 받을려면?
방태윤 [nabty] 1496 읽음    2002-07-26 18:54
참고자료가 될지 모르겠습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=6804

민인학 님이 쓰신 글 :
: 현재 저는 도스프로그램이 아규먼트로 하나의 프로젝트파일을 받아서
: 스탠다드 아웃으로 나오는 문자열을 GUI에 뿌리고 있습니다.
: 도스프로그램에서는 프로젝트파일을 파싱하다가 에러가나면 -1을 리턴해줍니다.
: 이 -1을 받아 다음의 루틴으로 넘어가는 것을 막아야 하는데.. 어떻게 해야하죠?
: 고수님들의 답변을 기다리겠습니다..
: 참고로 아래는 도스프로그램을 실행중에
: 스탠다드 아웃풋으로 나오는 문자열을 캡켜하여 구이(리치에디트)에 뿌려주는 루틴입니다.
:
: int __fastcall TIproveCompile::RunDosCommand(AnsiString Command)
: {
:         // 표준출력 리다이렉션 시작
:         bool flag;
:         HANDLE hwrite, hread;
:         SECURITY_ATTRIBUTES sa;
:         sa.nLength = sizeof(SECURITY_ATTRIBUTES);
:         sa.lpSecurityDescriptor = NULL;
:         sa.bInheritHandle = true;
:
:         // 어노니머스 파이프 생성
:         flag = CreatePipe(&hread, &hwrite, &sa, 0);
:         if(!flag) {
:                 iProveShowErrorMessage("Fail to open pipe.");
:                 return -1;
:         }
:
:         // 콘솔어플리케이션 프로세스 실행을 위한 준비
:         STARTUPINFO si;
:         memset(&si, 0, sizeof(STARTUPINFO));
:         si.cb = sizeof(STARTUPINFO);
:         si.dwFlags = STARTF_USESTDHANDLES;
:         si.hStdOutput = hwrite;   // 표준출력(stdout) 리다이렉션
:         si.hStdError = hwrite;    // 표준에러(stderr) 리다이렉션
:         PROCESS_INFORMATION pi;
:
:         AnsiString XilinxPath;
:
:         // 콘솔어플리케이션 프로세스 실행
:
:         flag = CreateProcess(NULL, Command.c_str(), NULL, NULL, true, DETACHED_PROCESS, NULL, NULL, &si, &pi);
:
:         if(!flag) {
:                 iProveShowErrorMessage("Fail to create process.");
:                 return -1;
:         }
:
:         CloseHandle(hwrite);    // 이것을 하지 않으면 프로세스가 block된다
:
:         char buffer[512];
:         char temp[MAX_SIZE];
:         DWORD BytesRead;
:         AnsiString ResultString;
:         int ret;
:
:         while(ReadFile(hread, buffer, sizeof(buffer)-1, &BytesRead, NULL) && BytesRead) {
:                 buffer[BytesRead] = '\0';
:                 ResultString = ResultString + buffer;
:                 MessageRichEdit->Lines->Text = ResultString;
:                 SendMessage( MessageRichEdit->Handle, WM_VSCROLL, SB_BOTTOM, 0 );
:                 iProveShowCompileMessage(buffer);
:                 Application->ProcessMessages();
:         }
:         CloseHandle(hread);
:
:         return 1;
: }
:
:
: 호출형식은..
: RunDosCommand("c:\temp\parser.exe test.prj");
:
: 고수님들의 답변 기다리겠습니다.

+ -

관련 글 리스트
20428 [질문] 도스프로그램의 리턴값을 받을려면? 민인학 1066 2002/07/26
20436     Re:[질문] 도스프로그램의 리턴값을 받을려면? 방태윤 1496 2002/07/26
20440         감사합니다.. 해결되었습니다. 민인학 1253 2002/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.