Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Defektes Exception-Handling

  Alt 20. Mär 2016, 21:27
Delphi-Version: XE8
Im Prinzip hab ich diesen Code, in ButtonClick einer stinknormalen VCL-Anwendung.
Delphi-Quellcode:
try
  CreateProcess(...);
  CurrControl.Process := ProcessInfo.hProcess;
  //raise Exception.Create('Fehlermeldung');
  case WaitForInputIdle(CurrControl.Process, Timeout) of
    //0: ;
    //WAIT_TIMEOUT: RaiseLastOSError(WAIT_TIMEOUT, '.'#10'ExecuteAndWait.WaitForInputIdle');
    WAIT_FAILED: RaiseLastOSError(554{ERROR_CANT_WAIT}, '.'#10'ExecuteAndWait.WaitForInputIdle');
    //else RaiseLastOSError(GetLastError, '.'#10'ExecuteAndWait.WaitForInputIdle');
  end;
except
  on E: EOSError do begin
    OutputDebugString(PChar('ExecuteAndWait.' + E.ClassName + '(' + E.ErrorCode.ToString + '): ' + E.Message));
    CurrControl.CloseHandles;
    CurrControl.ExitCode := E.ErrorCode;
    raise;
  end;
  on E: Exception do begin
    OutputDebugString(PChar('ExecuteAndWait.' + E.ClassName + ': ' + E.Message));
    CurrControl.CloseHandles; // CloseHandle(Process);
    CurrControl.ExitCode := S_FALSE;
    raise;
  end;
end;
Normaler Weise müsste es im EOSError landen, aber ich bekomme immer nur eine EExternalException raus.
Zitat:
Erste Gelegenheit für Exception bei $76EEFA92. Exception-Klasse $C0000008 mit Meldung 'system exception (code 0xc0000008) at 0x76d3d3c7'.
Auch direkt ein RAISE endet an selber Stelle.

Außerhalb dieses Try-Except, also direkt im OnClick, funktioniert es problemlos, wenn ich diese Exceptions auslöse.

Ich hab einfach keine Ahnung, was hier los ist, denn das Exception-Handling selber (das von Delphi) scheint ja sonst zu funktionieren.
$2B or not $2B

Geändert von himitsu (20. Mär 2016 um 21:33 Uhr)
  Mit Zitat antworten Zitat