업데이트 : D2007에만 해당하는 것으로 보입니다. 이전 버전에서 작동했던 것처럼 D2010에서 작동합니다.D2007의 예외 블록에서 Halt (n)가있는 오류 코드를 반환하는 방법은 무엇입니까?
내가 좋아하는 우유 공급 처리기 블록에서 잡은 예외의 종류에 따라 종료 코드 반환 싶습니다 : 예외 블록에서 정지 (n)를 호출 불행하게도 D2007에
program test;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Exitcode: Integer;
begin
Writeln('Enter error code:');
Readln(Exitcode);
try
raise EExternal.Create('sdsdkfjh');
except
on E:EExternal do
begin
Writeln(E.Classname, ': ', E.Message);
Halt(Exitcode);
end;
end;
end.
, 를 항상 반환 종료 코드 1, Halt()에 전달하는 것과 관계없이 아무리 내가 Halt(1)
를 것을 얻을 내가 원하는 것을 종료 코드
procedure ExceptHandler(ExceptObject: TObject; ExceptAddr: Pointer); far;
begin
ShowException(ExceptObject, ExceptAddr);
Halt(1); // <= @#$##@#$!
end;
을 그리고 :
는 예외 핸들러에서 종료하는 것은 SysUtils.ExceptHandler 전화, 보류 (비 중단) 예외를 지 웁니다의 Finalize를 호출하지 분명히 있기 때문에!
그래서 질문은 :
어떻게 간단하게 제기 된 예외에 따라 원하는 종료 코드를 반환 할 수 있습니다?
, 그것은 참으로 정확한 에러 코드를 반환 않습니다. 예상대로 작동하지 않을 수도있는 ErrorCode를 얻는 데 사용하는 방법이라고 생각합니다. – zz1433
@Aldo. 아니, D2007이야. 똑같은 것은 D2007과 D2010에서 다르게 작동합니다. 마이크가 예상하고보고 한대로 돌아 왔습니다. –
QC (http://qc.embarcadero.com/)에서 큰 보고서를 제출하십시오; D2007 업그레이드가 없을지라도, 알려진 버그를 볼 수 있다는 것이 좋습니다. –