delphi – 如何使用D2007从Exception块返回带有Halt(n)的错误代
发布时间:2020-12-15 04:07:43 所属栏目:大数据 来源:网络整理
导读:更新:似乎特定于D2007.它在D2010中工作,就像它在旧版本中工作一样. 我想返回一个退出代码,具体取决于Eception Handler块中捕获的异常类型,如: program test;{$APPTYPE CONSOLE}uses SysUtils;var Exitcode: Integer;begin Writeln('Enter error code:'); R
|
更新:似乎特定于D2007.它在D2010中工作,就像它在旧版本中工作一样.
我想返回一个退出代码,具体取决于Eception Handler块中捕获的异常类型,如: 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.
不幸的是,在D2007中,从异常块调用Halt(n)总是返回退出代码1,无论你传递给Halt(). 显然,因为退出Exception处理程序调用Finalize,它会清除挂起(非Abort)异常,调用SysUtils.ExceptHandler: procedure ExceptHandler(ExceptObject: TObject; ExceptAddr: Pointer); far; begin ShowException(ExceptObject,ExceptAddr); Halt(1); // <= @#$##@#$! end; 无论我想要什么退出代码,我都会得到Halt(1)! 所以问题是: 解决方法
这会有用吗?
NeedHalt := False;
try
raise EExternal.Create('sdsdkfjh');
except
on E:EExternal do
begin
Writeln(E.Classname,E.Message);
NeedHalt := True;
end;
end;
if NeedHalt then
Halt(Exitcode);
或这个? try
raise EExternal.Create('sdsdkfjh');
except
on E:EExternal do
begin
Writeln(E.Classname,E.Message);
AcquireExceptionObject;
Halt(Exitcode);
end;
end;
无论如何:it’s a bug in D2007,which was fixed in D2010. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
