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
[20428] [질문] 도스프로그램의 리턴값을 받을려면?
민인학 [h2h1995] 1066 읽음    2002-07-26 17:59
현재 저는 도스프로그램이 아규먼트로 하나의 프로젝트파일을 받아서
스탠다드 아웃으로 나오는 문자열을 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         감사합니다.. 해결되었습니다. 민인학 1254 2002/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.