Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Съвместяване на двата механизма Win32 SEH и C++ Exception Handling


Информационни технологии | 2009-12-04 | 108 сваляния

22 Съвместяване на двата механизма (Win32 SEH и C++ Exception Handling).


Някои проблеми в SEH механизма:

  1. Възможно е ако работим само със SEH механизма да пропуснем деструкцията на някои проблеми.

  2. SEH механизма дава възможност за много точно детайлиране на причината на ниско ниво, но при положение че сме прихванали съответната причина при SEH.

  3. Повечето стандартни С++ функции са написани така, че хвърлят С++ exception, а не SEH exception.

Възможно е рпеобразуването на обекти на SEH към С++ exception обекти. За целта в 32 битовите SEH механизми е преджидена _set_se_translator позволява дефинирането на потребителска функция и извършва транслация на SEH механизма към С++ exception механизма. В My_func се изпълнява транслацията и се хвърля (throw) С++ exception обект, който съдържа информация с exception.

western" style= "font-style: italic; margin-bottom: 0in; text-indent: 0.5in"> unsigned int m_nCode;

public: CWin32Except( unsigned int nCode ) : m_nCode(nCode){};

unsigned int Code() const {return m_nCode;};

}

използване:

void SEH_MyFunc( unsigned int nCode, EXCEPTION_POINTERS* pExp ){

throw CWin32Except( nCode );

}

void DoAccessViolation(){

int* p =0;

*p = 32;

}

void main(void){

_se_translator_function fn old;

fnold = _set_se_translator( SEH_MyFunc );

try{

DoAccessViolation();

}

catch( CWin32Except& e ){

cout << изкл. с CWin32Except << endl; cout << Exception is << e.Code() << endl;

}

_set_se_translator( fnold);

}


23 Обработка на изключителни ситуации при подкрепата на MFC класивете. Последователност на обработките.


MFC дефинира над 10 класа свързани с exceptions.

try

{

// Execute some code that might throw an exception.

}

catch( CException* e ){

// Handle the exception;"e" contains information

e->Delete();

}

// Other normal program statements ...


фрагмент прихващащ различни обекти exceptions:

try{

//Execute code that might throw an exception.

}

catch( CMemoryException* e ){

// Handle the out-of-memory exception here.

}

catch( CFileException* e ){

// Handle the file exceptions here.

}

catch( CException* e ){

// Handle all other types of exceptions here.

}


Действията се извършват по следният начин:

  1. Генерира се exception.

  2. Намира се съответнияат catch блок.

  3. Предава се обекта exception catch блока.

  4. Автомат. деструкция на всички обекти създадени в try блока от началото до момента на ген. на exception в обратен ред.

Съвместяване на двата механизма Win32 SEH и C++ Exception Handling

Добави своя коментар:



Тагове от реферата: , , , ,


Подобни материали


ОБЩА СХЕМА НА ИНФОРМАТИКАТА КАТО НАУКА Информационни технологии | 2010-08-06 | 103 прочитания
Система за управление на бази от данни (СУБД) Информационни технологии | 2010-08-06 | 96 прочитания
Електронен Бизнес Информационни технологии | 2010-08-06 | 62 прочитания
Изброен тип Информационни технологии | 2010-08-06 | 110 прочитания
Основни параметри в Word Информационни технологии | 2010-08-06 | 76 прочитания
Представяне на данните в компютърната система- Информационни технологии | 2010-08-06 | 57 прочитания
СИСТЕМЕН АНАЛИЗ (СА). СЪЩНОСТ, ПРИНЦИПИ И ЕТАПИ Информационни технологии | 2010-08-06 | 209 прочитания
ПОНЯТИЕ ЗА АВТОМАТИЗИРАНИ СИСТЕМИ ЗА УПРАВЛЕНИЕ Информационни технологии | 2010-08-06 | 169 прочитания
Модели на реалния свят. Обекти.Атрибути и ключове. Връзки. Схеми Обекти-Връзки Информационни технологии | 2010-08-06 | 343 прочитания
Разработка на Web-приложения с Java Информационни технологии | 2010-08-06 | 142 прочитания