Uruchomienie aplikacji DOSowej z parametrem z poziomu aplik.

0

J.w., jak można to zrobić?

Konkretnie chodzi mi o wywołanie kompilatora G++. Próbowałem zarówno ShellExecute

ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'MinGW\bin\g++.exe'), PChar('"' + sciezka_pliku_cpp + '" -o "' + sciezka_do_tworzonego pliku_exe + '"'), nil, SW_SHOW);

jak i WinExec,

WinExec(PAnsiChar('"' + ExtractFilePath(Application.ExeName) + 'MinGW\bin\g++.exe" "' + sciezka_pliku_cpp + '" -o "' + sciezka_do_tworzonego pliku_exe + '"'), SW_SHOW);

ale żadna z tych funkcji nie działa we właściwy sposób - nie wywołuje okna i nie przeprowadza kompilacji.

Spróbowałem również CreateProcess, ale wywołanie połączonej z nim procedury owocuje błędem Access violation at address 77B84E20 in module 'ntdll.dll'. Read of address 00000007.

var
SI:TStartupInfo;
PI:TProcessInformation;

begin
CreateProcess(nil, PWideChar(ExtractFilePath(Application.ExeName) + 'MinGW\bin\g++.exe "' + sciezka_pliku_cpp + '" -o "' + sciezka_do_tworzonego pliku_exe + '"'),
nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);

W jaki sposób mam wywołać G++? Domyślam się, że muszę użyć CreateProcess, ale nie wiem jak (ew. mogę zapisywać odpowiedni plik .bat i go uruchamiać, ale wolałbym się od tego powstrzymać)...

0

A w Winexec to się chyba całość a nie fragmenty daje w cudzysłów? Tak jak przy robieniu skrótów w win itp.

0

U mnie działa tak:

const
  ExeFile = 'MinGW\bin\gcc.exe';

function TForm1.RunGCC(path, sciezka_pliku_cpp, sciezka_pliku_exe: string): Boolean;
var
  PI: TProcessInformation;
  exe_i_parametry: string;
begin
  exe_i_parametry := ExeFile + ' ' + sciezka_pliku_cpp + ' -o ' + sciezka_pliku_exe;
  try
    PI := runProcess(PChar(path + exe_i_parametry));
    Result := True;
  except
    Result := False;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1