Delphi Handle Exception
2837 단어 exception
try
raise Exception.Create('Error Message');
except
on e:Exception do
begin
ShowMessage(e.Message);
end;
end;
지금 말하고자 하는 것은 또 다른 방법이다.
var
ExceptionObj : TObject;
begin
{ Simulate an access violation. }
try
System.Error(reAccessViolation);
except
ExceptionObj := ExceptObject;
if ExceptionObj <> nil then
begin
MessageDlg(ExceptionObj.ToString, mtError, [mbOK], 0);
end;
end;
end;
위의 코드는 ExceptObject라는 대상을 사용했습니다. 이 대상은 System 단원에서 정의된 것으로 현재 처리 중인 오류 대상을 되돌려줍니다. 오류가 발생하지 않으면 그 값은 nil입니다.오류 변수 (try.except에 정의된) 에 접근할 수 없을 때 ExceptObject는 오류 처리 코드가 함수를 호출하여 오류 처리를 할 때 유용하게 보입니다.
주의해야 할 것은 오류 처리가 끝난 후에 ExceptionObject가 nil로 되돌아올 것입니다.사용할 수 있는 함수 중 하나는 AcquireExceptionObject입니다.이 함수는 현재 except 대상의 바늘을 되돌려줍니다. 이 함수의 역할은 현재 except 대상이 방출되는 것을 방지하기 위해서입니다.AcquireExceptionObject는 참조 수를 통해 작동합니다.
다음은 델피의 오류 처리 코드입니다.
procedure TForm2.btIOErrorClick(Sender: TObject);
var
ExceptionObj : TObject;
begin
{
Try to write something onto the console--it will raise an
exception.
}
try
WriteLn('This will generate an error because there is no' +
' console attached!');
except
ExceptionObj := ExceptObject;
if ExceptionObj = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(ExceptionObj.ToString, mtError, [mbOK], 0);
end;
end;
end;
{$OVERFLOWCHECKS ON}
{$OPTIMIZATION OFF}
{$HINTS OFF}
procedure TForm2.btOverflowErrClick(Sender: TObject);
var
b : Cardinal;
ExceptionPtr : Pointer;
begin
{
Simulate an overflow. Note: Enable the overflow
checking and disable optimizations, because the Delphi
compiler will not compile this code otherwise.
}
ExceptionPtr := nil;
try
b := $FFFFFFFF;
b := b * b;
except
ExceptionPtr := AcquireExceptionObject;
end;
// Check exception.
if ExceptionPtr = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(TObject(ExceptionPtr).ToString, mtError, [mbOK], 0);
ReleaseExceptionObject;
end;
end;
{$HINTS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
procedure TForm2.btRuntimeErrorClick(Sender: TObject);
var
ExceptionObj : TObject;
begin
{ Simulate an access violation. }
try
System.Error(reAccessViolation);
except
ExceptionObj := ExceptObject;
if ExceptionObj = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(ExceptionObj.ToString, mtError, [mbOK], 0);
end;
end;
end;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.