방태윤 님이 쓰신 글 :
: 참고자료가 될지 모르겠습니다.
:
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");
: :
: : 고수님들의 답변 기다리겠습니다.