Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 14:18   #1
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию Параметры из ком. строки

Здраствуйте!!!
Я пишу свою IDE для компилятора TASM(в общем-то не важно к чему пишу), параметры для командной строки я передаю через ShellExecute. Все нормально работает. Допустим я сделал в листинге ошибку, нажал на кнопку компиляции и соответственно прога не компилируется и ошибка компиляции. Хотелось бы вывести эти ошибки из консоли в, например, listbox или другой подобный компонент. Подскажите как это сделать?
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 15.02.2010, 14:22   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Через файл.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.02.2010, 14:25   #3
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Я тоже так думал, вопрос как это сделать? проблема заключается в том чтобы, т.е. как получить те строки?
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 15.02.2010, 14:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот предложение:
http://www.programmersforum.ru/showt...ExecConsoleApp
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.02.2010, 14:37   #5
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Спасибо, Stilet теперь буду разбираться

Подогнал под свой код
Пример работает для 32 битных прог(в моём случае TASM32.EXE), а для 16 битных нет(TASM.EXE) Как быть?
xor eax, eax
xchg [eax], eax

Последний раз редактировалось Stilet; 15.02.2010 в 16:39.
MalCer вне форума Ответить с цитированием
Старый 15.02.2010, 16:40   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот про 16 битки я уже и думать забыл, так что...
Разве что перенаправляй вывод компилятора в файл
tasm.exe... >fileout.txt
Получишь файл с ошибками. Ну и пытайся его грузить в Мемо
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.02.2010, 18:05   #7
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Спасибо всем кто помог. Для 16 биток в файл сделал так(может кому пригодится)
Код:
{$APPTYPE CONSOLE}
{$O-,T+}
uses
  SysUtils, Windows;
type
  Runner=object
    fChildStdoutRd, fChildStdinWr, fChildStdoutWr, fChildStdinRd:tHandle;
    procedure ExecConsoleApp(CommandLine: AnsiString);
    procedure Terminate;
    function Read(Timeout: Integer): string;
    function Write(data:String):Boolean;
  end;
var Runner1:Runner;
    str:String;
procedure Runner.ExecConsoleApp(CommandLine: AnsiString);
var
  fsaAttr: TSECURITYATTRIBUTES;
  tmp1, tmp2:tHandle;
function CreateChildProcess(cmd:String; stdin, stdout:tHandle):Boolean;
var si: tStartupInfo;
    pi: TProcessInformation;
begin
  ZeroMemory(@si, SizeOf(TStartupInfo));
  si.cb := SizeOf(TStartupInfo);
  si.hStdInput := StdIn;
  si.hStdOutput := StdOut;
  si.dwFlags := STARTF_USESTDHANDLES;
  Result := CreateProcess(nil, PChar(cmd), nil, nil, TRUE, 0, nil, nil, si, pi);
end;
begin
  FsaAttr.nLength := SizeOf(SECURITY_ATTRIBUTES);
  FsaAttr.bInheritHandle := True;
  FsaAttr.lpSecurityDescriptor := nil;
  assert(CreatePipe(FChildStdoutRd, FChildStdoutWr, @FsaAttr, 0), '[STDOUT CREATING FAILED]');
  assert(CreatePipe(FChildStdinRd, FChildStdinWr, @FsaAttr, 0), '[STDIN CREATING FAILED]');
  assert(DuplicateHandle(GetCurrentProcess(), FChildStdoutRd,
    GetCurrentProcess(), @Tmp1, 0, False, DUPLICATE_SAME_ACCESS), '[STDOUT DUPLICATE FAILED]');
  assert(DuplicateHandle(GetCurrentProcess(), FChildStdinWr,
    GetCurrentProcess(), @Tmp2, 0, False, DUPLICATE_SAME_ACCESS), '[STDIN DUPLICATE FAILED]');
  CloseHandle(fChildStdoutRd);
  CloseHandle(fChildStdinWr);
  fChildStdoutRd:=tmp1;
  fChildStdinWr:=tmp2;
  CreateChildProcess(CommandLine, FChildStdinRd, FChildStdoutWr);
end;

procedure Runner.Terminate;
begin
  CloseHandle(fChildStdoutRd);
  CloseHandle(fChildStdoutWr);
  CloseHandle(fChildStdinRd);
  CloseHandle(fChildStdinWr);
end;
function Runner.Write(data: string):Boolean;
var
  dwWritten, BufSize: DWORD;
  chBuf: PChar;
begin
  chBuf := PChar(Data + Chr($0D) + Chr($0A));
  BufSize := Length(chBuf);
  Result := WriteFile(FChildStdinWr, chBuf^, BufSize, dwWritten, nil);
  Result := Result and (BufSize = dwWritten);
end;

function Runner.Read(Timeout: Integer): string;
var
  i: Integer;
  dwRead, BufSize, DesBufSize: DWORD;
  chBuf: PChar;
  Res: Boolean;
begin
  BufSize := 0;
  New(chBuf);
  repeat
    for i := 0 to 9 do
    begin
      Res := PeekNamedPipe(FChildStdoutRd, nil, 0, nil, @DesBufSize, nil);
      Res := Res and (DesBufSize > 0);
      if Res then
        Break;
      Sleep(Round(Timeout / 10));
    end;
    if Res then
    begin
      if DesBufSize > BufSize then
      begin
        FreeMem(chBuf);
        GetMem(chBuf, DesBufSize);
        BufSize := DesBufSize;
      end;
      Res := ReadFile(FChildStdoutRd, chBuf^, BufSize, dwRead, nil);
      Result := Result + Copy(chBuf, 1, dwRead);
    end;
  until not Res;
end;

var
    f:textFile;
begin
    Runner1.ExecConsoleApp('C:\TASM\BIN\TASM32.EXE C:\TASM\BIN\1.asm');

    assignfile(f,'set.txt');
    rewrite(f);
    writeln(f,runner1.Read(100));// время выполнения
    closefile(f);

  //writeln(runner1.Read(1000));
 // readln;
end.
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ком-порт! Gawwws Microsoft Office Excel 1 06.02.2010 20:40
WSH: Как правильно передать параметры коммандной строки? voam JavaScript, Ajax 4 12.12.2009 15:16
параметры командной строки. nazavrik Общие вопросы C/C++ 4 20.11.2009 20:15
Параметры коммандной строки BaronTreep Общие вопросы Delphi 4 30.05.2009 21:27
Параметры из командной строки ProGg Паскаль, Turbo Pascal, PascalABC.NET 5 13.02.2009 00:17