Pourquoi ne regardes-tu pas les sources? Elles sont données!
procedure Execute(const CommandLine: string);
var
TempStr: array [0..255] of Char;
WriteResult: Cardinal;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
if FileExists (Copy (CommandLine, 1, Pos (' ', CommandLine))) then begin
if Verbose then begin
StrPLCopy (TempStr, CommandLine + #13#10, 255);
WriteFile (GetStdHandle (Std_Output_Handle), TempStr, Length (CommandLine) + 2, WriteResult, nil);
end;
FillChar (StartupInfo, SizeOf (StartupInfo), 0);
with StartupInfo do begin
cb := SizeOf (StartupInfo);
lpTitle := PChar ('TIGCC');
end;
if CreateProcess (nil, PChar (CommandLine), nil, nil, True, 0, nil, nil, StartupInfo, ProcessInfo) then begin
WaitForSingleObject (ProcessInfo.hProcess, Infinite);
GetExitCodeProcess (ProcessInfo.hProcess, WriteResult);
CloseHandle (ProcessInfo.hProcess);
CloseHandle (ProcessInfo.hThread);
if WriteResult <> 0 then
Fatal;
end else
Fatal (SRunFailed);
end else
Fatal (Format (SProgNotFound, [Copy (CommandLine, 1, Pos (' ', CommandLine))]));
end;
C'est ce que fait
tigcc.exe.
IDE.exe est un peu plus compliqué, parce qu'il redirige aussi
stdout et
stderr pour afficher les messages d'erreur dans l'interface graphique. Cf.
ProcessUnit.pas.
Et je te signale que ce code est en principe sous GPL.