2017-05-03 7 views
2

예외가 발생하면 오류 코드를 포함시켜야합니다.예외시 ErrorCode 설정

type EInOutError = class(Exception) 
     ErrorCode: Integer; 
    end; 

Exceptions (Delphi)

하지만 어떻게 오류 코드를 설정하는 생각이 없습니다. 나는 시도 :

type ECustomError= class(Exception) 
     ErrorCode: Integer=129; 
    end; 

는하지만 아무도 성공, 어떻게 오류 코드를 설정할 수 없다?

+0

귀하의 코드는에 시도 그것의 정의에 값을 써라. 확실히 이것은 당신이 찾고있는 것이 아닙니다. 예외가 발생했을 때 이것을 할당해야합니다. 맞습니까? 그렇다면이 예외 클래스에 대해 생성자를 구현하고 예외를 만들 때이 변수를 전달해야합니다. –

+0

오류 코드를 표시하거나 다른 결과에 기능? –

+0

@NasreddineAbdelillahGalfout 만 표시합니다. – strykerbits

답변

10

클래스 정의에서이를 설정할 수 없으며 설정할 수 없습니다. 어디에서 왜 호출되고 있는지에 대한 컨텍스트가 없습니다. 대신이 예외가 발생할 수있는 모든 위치에서 런타임에이 함수를 할당해야합니다.

이것은 EInOutError에서 클래스를 파생과에 사용자 정의 생성자를 추가하여 수행 할 수 있습니다 : 당신이 예외를 발생시킬 때

type 
    ECustomError = class(EInOutError) 
    public 
    constructor Create(AMsg: String; ACode: Integer); reintroduce; 
    end; 

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited Create(AMsg); 
    ErrorCode := ACode; 
end; 

그런 다음, 당신이 그렇게 같이 호출을 ...

raise ECustomError.Create('Some error message', 129); 

당신은 조금 더 가서 메시지에이 코드를 추가 할 수 있습니다 ...

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited CreateFmt('%s (Error Code %d)', [AMsg, ACode]); 
    ErrorCode := ACode; 
end; 
+5

다른 방법은 커스텀 클래스를 파생시키지 않는 것입니다 :'var E : EInOutError; begin E : = EInOutError.Create ('some error message'); E.ErrorCode : = 129; E를 높인다. 끝; –