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
[20440] 감사합니다.. 해결되었습니다.
민인학 [h2h1995] 1253 읽음    2002-07-26 20:37
방태윤 님이 쓰신 글 :
: 참고자료가 될지 모르겠습니다.
: 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:[질문] 도스프로그램의 리턴값을 받을려면? 방태윤 1497 2002/07/26
20440         감사합니다.. 해결되었습니다. 민인학 1253 2002/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.