Операционные системы. Марапулец Ю.В. - 47 стр.

UptoLike

Составители: 

*/
catch ( COleException *e ) // OLE-исключения
}
tch(COleDispatchException *e ) // исключения диспетчеризации
// (OLE-автоматизации)
catch( CUserException *e ) // выводит окно сообщения,
//а затем генерирует исключение CException
...
след за этим следует блок catch (CException *e). В противном случае
компилятор
catch ен следовать после предыдущих блоков,
{ пилятор выдаст код ошибки
e->GetErrorMessage( szCause, 255 ); csText += szCause;
pDC->TextOut( 90, vSize*iLine++, csText );
лючение, в программу включен блок catch
(...), который перехватывает все исключения, но выдает не очень полную
информацию
catch( лючений!!!
{
pDC->TextOut( 90, vSize*iLine++, csText );
throw; // передает исключение внешнему блоку catch,
// приведенному ниже
{
...
ca
{
...
}
{
}
В
воспринял бы предыдущие блоки как ошибочные.
( CException *e ) // долж
// иначе ком
TCHAR szCause[255] ;
csText = "CException cause: ";
}
И поскольку нам известно, что ни один из классов CException на самом
деле не может обработать данное иск
о том, что произошло.
...) // перехват всех иск
csText = "In inner catch all block: ";
pDC->TextOut( 90, vSize*iLine++, csText );
csText = "Throwing exception to outer catch block: ";
}
Исключение, произошедшее во внутреннем блоке try, перехватывается
внутренним блоком catch и передается внешнему блоку catch. Оператор throw
предотвращает выполнение фрагмента программы, который следует после
47
*/
           catch ( COleException *e )      // OLE-исключения
           {
                  ...
           }
           catch(COleDispatchException *e ) // исключения диспетчеризации
                                                  // (OLE-автоматизации)
           {
                  ...
           }
           catch( CUserException *e )         // выводит окно сообщения,
           {                  //а затем генерирует исключение CException
                  ...
           }

     Вслед за этим следует блок catch (CException *e). В противном случае
компилятор воспринял бы предыдущие блоки как ошибочные.

           catch ( CException *e ) // должен следовать после предыдущих блоков,
           {                          // иначе компилятор выдаст код ошибки
                  TCHAR szCause[255] ;
                  csText = "CException cause: ";
                  e->GetErrorMessage( szCause, 255 ); csText += szCause;
                  pDC->TextOut( 90, vSize*iLine++, csText );
           }

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

           catch(...)                // перехват всех исключений!!!
           {
                  csText = "In inner catch all block: ";
                  pDC->TextOut( 90, vSize*iLine++, csText );
                  csText = "Throwing exception to outer catch block: ";
                 pDC->TextOut( 90, vSize*iLine++, csText );
                 throw;           // передает исключение внешнему блоку catch,
                               // приведенному ниже
           }

     Исключение, произошедшее во внутреннем блоке try, перехватывается
внутренним блоком catch и передается внешнему блоку catch. Оператор throw
предотвращает выполнение фрагмента программы, который следует после
                                      47