Исключительные ситуации

Исключительные ситуации представляют собой структурный, унифицированный, типобезопасный способ обработки нештатных (ошибочных) ситуаций как на системном, так и на прикладном уровне.

Исключения могут происходить по следующим причинам:

Обработка исключительных ситуаций

Для обработки исключений используется оператор Try…Except…Finally…End Try. После ключевого слова Try указывается блок, при выполнении которого может произойти исключительная ситуация.

Блок Except выполняется, если произошла исключительная ситуация. В данном блоке может содержаться блок кода, выполняемый в случае возникновения исключительной ситуации. Также в данном блоке могут содержаться блоки On...Do - это набор операторов, начинающихся с ключевого слова On, следом за которым указан тип обрабатываемого исключения: имя переменной, двоеточие и тип переменной - класс обрабатываемого исключения. Через указываемую переменную будет осуществляться доступ к информации об исключении. В качестве типа переменой указывается класс System.Exception или какой-либо класс, наследуемый от System.Exception.

Try
    
//...
    //Выполнение кода, в котором может возникнуть ошибка
    //...
Except On Ex: System.Exception Do
    
Begin
        
//Обработка исключительной ситуации
    End;
On Ex: System.ArgumentOutOfRangeException Do
    
Begin
        
//Обработка исключительной ситуации
    End;
Else
    
Begin
        
//Обработка всех остальных исключительных ситуаций
    End;
Finally
    
//Блок, выполняемый всегда
End Try;

Исключительные ситуаций при выполнении Fore-методов

Язык Fore основан на использовании COM-технологии. Если при использовании системных свойств/методов языка Fore возникает исключительная ситуация, то для обработки таких исключений используется класс System.Runtime.InteropServices.COMException.

Если исключительная ситуация возникает при использовании свойств/методов, реализованных в пользовательских Fore-сборках, то обработать такие исключения можно с использование класса System.Exception.

Пример

Пример обработки исключительной ситуации, которая может возникнуть при выполнении системного Fore-метода IMetabaseDefinition.Open:

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Sp: ISecurityPackage = 
New StandardSecurityPackage();
Begin
    
Try
        Mb := Params.Metabase;
        Mb.Definition.Open(Sp.CreateCredentials(AuthenticationMode.amPassword),
            ApplicationMode.amWin, LocaleCodeID.lcidRussian);
    
Except On Ex: System.Runtime.InteropServices.COMException Do
        System.Diagnostics.Debug.WriteLine(Ex.Message);
    
Finally
    
End Try;
End Sub;

Пример обработки исключительной ситуации, которая может возникнуть при выполнении пользовательского метода, реализованного в Fore-сборке с идентификатором «UserAssm»:

Public Shared Sub Main(Params: StartParams);
Var
    Svc: IForeServices;
    Run: IForeRuntime;
    Assembly: IForeAssembly;
    FClass: IForeClass;
    FSub: IForeSub;
    FObj: IForeObject;
Begin
    Svc := Params.Metabase 
As IForeServices;
    Run := Svc.GetRuntime();
    Run.LoadAssembly(
"UserAssm");
    Assembly := Run.BindToAssembly(
"UserAssm");
    FClass := Assembly.BindToClass(
"UserClass");
    FObj := FClass.CreateObject();
    FSub := FClass.BindToMethod(
"Test");
    FSub.Self := FObj;
    
Try
        FSub.Invoke();
    
Except On Ex: System.Exception Do
        System.Diagnostics.Debug.WriteLine(Ex.Message);
    
Finally
    
End Try;
End Sub;

См. также:

Руководство по языку Fore.NET