Получить номер строки компилятора Delphi 2010 Comandline - PullRequest
1 голос
/ 31 марта 2011

Есть ли способ получить номер строки компилятора командной строки Delphi 2010 (dcc32.exe) для передачи обратно на индикатор выполнения приложения с графическим интерфейсом в канале?

В качестве альтернативы, что является хорошей функцией для возврата(номер строки) из следующих строк:

C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(20) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(339) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(341) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(512) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(1024) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(1536) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(2048) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(2560) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(3072) 
C:\Components\Dabbler\Pipes\Demos\Demo3\TestUnit\uGlobal.pas(3342)  

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

Посмотрите на JEDI JVCL Установщик.Это делает именно это, и это с открытым исходным кодом, чтобы вы могли видеть, как это было сделано.

2 голосов
/ 31 марта 2011

Искать до конца строки. Символ, который вы найдете там, должен быть закрывающим кругом. Обратитесь к открывающей скобке. Символы, которые вы передали, являются номером строки.

function ExtractLineNumber(const Line: string): Integer;
var
  i, len: Integer;
begin
  i := Length(Line);
  Assert(Line[i] = ')', 'unexpected line format');
  len := -1;
  while (i > 0) and (Line[i] <> '(') do begin
    Dec(i);
    Inc(len);
  end;
  Assert(i > 0, 'unexpected line format');
  Assert(len > 0, 'unexpected line format');
  Result := StrToInt(Copy(Line, i + 1, len));
end;
...