Приклад обробки помилок

Ця книга присвячена питанням розробки програм з використанням інтерфейсу прикладного програмування операційних систем компанії Microsoft (Windows 9х, Windows XP, Windows 2000 та Windows Server 2003). Основна увага приділяється базовим системним службам, включаючи управління файловою системою, процесами та потоками, взаємодію між процесами, мережне програмування та синхронізацію. Розглядається методика перенесення додатків, написаних серед Win32, в середу Win64. Докладно описуються всі аспекти системи безпеки Windows та її практичного застосування. Достаток реальних прикладів, доступних також і на Web-сайті книги, значно спрощує засвоєння матеріалу.
Книга орієнтована на розробників та програмістів, як високої кваліфікації, так і початківців, а також буде корисною для студентів відповідних спеціальностей.
Системне програмування в середовищі Windows
Приклад: обробка помилок
Приклад: обробка помилок
У програмі 1.2 було продемонстровано використання лише найпримітивніших засобів обробки помилок, а саме отримання номера помилки в змінній типу DWORD за допомогою функції GetLastError. Виклик функції, а не просто отримання глобального номера помилки, як це робиться за допомогою функції UNIX errno, гарантує унікальну ідентифікацію системних помилок для кожного з потоків (глава 7), що використовують область зберігання даних, що розділяється.
Функція FormatMessage перетворює простий номер повідомлення на описове повідомлення, що є фразою англійською або будь-якою іншою з безлічі можливих мов, і повертає розмір повідомлення.
У програмі 2.2 представлена корисна універсальна функція ReportError, призначена для обробки помилок і за своїмможливостям аналогічна входить до складу бібліотеки функції perror, а також описаним в [40] функцій err_sys і err_ret. Функція ReportError передає у вихідний буфер повідомлення у вигляді, що визначається першим аргументом, або припиняє виконання з кодом виходу помилково, або здійснює звичайне повернення управління, залежно від значення другого аргументу. Третій аргумент визначає, чи мають відображатися системні повідомлення про помилки.
Функція ReportError спрощує обробку помилок, і використовуватиметься майже у всіх наступних прикладах. У розділі 4 вона буде модифікована для створення винятків.
У програмі 2.2 вводиться заголовний файл EvryThng.h. Як випливає з самої його назви, цей файл включає файли , Envirmnt.h і всі інші заголовні файли, які були явно вказані в програмі 2.1. Крім того, в ньому описані такі функції, як зазвичай PrintMsg, PrintStrings і ReportError. В інших прикладах буде використовуватися лише цей заголовний файл, лістинг якого наведено в додатку А.
Зверніть увагу на виклик функції HeapFree, що знаходиться майже наприкінці програми. Про цю функцію буде розказано у розділі 5.