最近在学JAVA,老在DOS下调试很不爽,想写一个简单一点的编译环境,调用javac编译后不知如何得到编译信息?

解决方案 »

  1.   


    昨天看到DFW有, 以前在一个网上也见到有,没几行代码转的,不是俺写的
    得到DOS运行命令的输出procedure Tform1.formCreate(Sender: TObject);
    begin
      Memo1.Clear;
      Edit1.Text := 'ipconfig'
    end;
     
    procedure Tform1.Button1Click(Sender: TObject);
    const
      ReadBuffer = 65535;
    var
      Security : TSecurityAttributes;
      ReadPipe,WritePipe : THandle;
      start : TStartUpInfo;
      ProcessInfo : TProcessInformation;
      Buffer : Pchar;
      BytesRead : DWord;
      Apprunning : DWord;
    begin
      with Security do
      begin
        nlength := SizeOf(TSecurityAttributes);
        binherithandle := true;
        lpsecuritydescriptor := nil;
      end;
      if Createpipe(ReadPipe, WritePipe, @Security, 0) then
      begin
        Buffer := AllocMem(ReadBuffer + 1);
        FillChar(Start,Sizeof(Start),#0);
        start.cb := SizeOf(start);
        start.hStdOutput := WritePipe;
        start.hStdInput := ReadPipe;
        start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
        start.wShowWindow := SW_HIDE;
        if CreateProcess(nil,PChar(Edit1.Text),@Security,@Security,true,NORMAL_PRIORITY_CLASS,
          nil,nil,start,ProcessInfo) then
        begin
          repeat
            Apprunning := WaitForSingleObject(ProcessInfo.hProcess,250);
            Application.ProcessMessages;
          until (Apprunning <> WAIT_TIMEOUT);
          Repeat
            BytesRead := 0;
            ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil);
            Buffer[BytesRead]:= #0;
            OemToAnsi(Buffer,Buffer);
            Memo1.Text := Memo1.text + String(Buffer);
          until (BytesRead < ReadBuffer);
        end;
        FreeMem(Buffer);
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ReadPipe);
        CloseHandle(WritePipe);
      end;
    end;
      

  2.   

    建议你用EditPlus,可以捕获DOS输出。