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ć)...