Виключення Win32

Разом з програмними викликами виключень за допомогою інструкції throw, виключення генеруються системними програмами Win32 API у відповідь на збій апаратного або програмного забезпечення. Такі виключення називаються виключеннями Win32 або структурованими виключеннями. Win32 є інтерфейсом низького рівня, використовуваним при розробці 32-розрядних програм для операційних систем Windows.

Апаратні помилки, що генерують виключення Win32, це такі помилки, як ділення на нуль, некоректне звернення до пам'яті та інші. У відповідь на певні помилки програмного забезпечення, такі, наприклад, як брак пам'яті, деякі функції Win32 API можуть генерувати виключення, а можуть просто повертати код помилки.

Наприклад, якщо функції ::НеарА11ос() передається прапор HEAP_GENERATE_EXCEPTIONS, то при невдалій спробі розподілу пам'яті генерується виключення.

Для кожної функції Win32 API, яка може генерувати виключення, в документації MSDN описані всі випадки, в яких відбувається генерація виключення.

Якщо виникло виключення Win32, а програма не надає для нього обробник, видається повідомлення про помилку і програма завершується.

Хай, наприклад, в програмі зустрілися дві інструкції, виконання останньої з яких приводить до ділення на нуль:

 

int i = 0;

int j = 5 / i;

 

і в програмі відсутній обробник виключень Win32. В цьому випадку на екран буде виведено вікно повідомлення, зображене на мал. 4.1.

 

  Малюнок 4.1 Вікно повідомлення про необроблене виключення

 

Після клацання на кнопці з написом Details нижче за повідомлення в додатковому вікні з прокруткою з'явиться докладніша інформація про виключення, як це показано на мал. 4.2.

  Малюнок 4.2 Розгорнуте вікно повідомлення про виключення

Якщо в цьому вікні клацнути по кнопці з написом Continue, програмі буде повернуто управління на інструкцію, наступну за інструкцією, що викликала виключення. Програма після цього може спробувати продовжити свою роботу.

При клацанні на кнопці з написом Quit робота програми буде негайно припинена.