Разом з програмними викликами виключень за допомогою інструкції 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 робота програми буде негайно припинена.