Hallo,
dein Result ist ein Integer- Typ der auch negativ sein kann und die Funktion GetExitCodeProcess() erwartet als 2. Parameter den Typ cardinal.
Wenn Result unbedingt -1 sein soll könnte man es auch so machen:
Delphi-Quellcode:
function WinExecAndWait32(FileName:
string; Visibility: integer): Int64;
var
zAppName:
array[0..512]
of char;
zCurDir :
array[0..255]
of char;
WorkDir :
string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
ExitCode: cardinal;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(
nil,
zAppName,
{ pointer to command line string }
nil,
{ pointer to process security attributes }
nil,
{ pointer to thread security attributes }
false,
{ handle inheritance flag }
CREATE_NEW_CONSOLE
or { creation flags }
NORMAL_PRIORITY_CLASS,
nil,
{ pointer to new environment block }
nil,
{ pointer to current directory name }
StartupInfo,
{ pointer to STARTUPINFO }
ProcessInfo)
then { pointer to PROCESS_INF }
Result := -1
else
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
Result:= ExitCode;
end;
end;
Ansonsten muss deine Funktion eben eine Wert vom Typ Cardinal zurückgeben, der kann dann aber nicht negativ sein.