Читать онлайн «Windows via C/C++. Программирование на языке Visual C++»

Автор Джеффри Рихтер

Глава 1. Обработка ошибок. docx 7 Вы тоже можете это сделать Итак, я показал, как функции Windows сообщают об ошибках. Майкрософт по- зволяет вам использовать этот механизм и в собственных функциях. Допустим, вы пишете функцию, к которой будут обращаться другие программы. Вызов этой функции может по какой-либо причине завершиться неудачно, и вам тоже нужно сообщать об ошибках. С этой целью вы просто устанавливаете код последней ошибки в потоке и возвращаете значение FALSE, INVALID_HANDLE_VALUE, NULL или что-то другое, более подходящее в Вашем случае. Чтобы установить код последней ошибки в потоке, вы вызываете SetLastError VOID SetLastError(DWORD dwErrCode); и передаете ей нужное 32-битное число. Я стараюсь использовать коды, уже оп- ределенные в WinError. h, — при условии, что они подходят под те ошибки, о ко- торых могут сообщать мои функции. Если вы считаете, что ни один из кодов в WinError. h не годится для ошибки, возможной в вашей функции, определите свой код. Он представляет собой 32-битное значение, которое разбито на поля, пока- занные в следующей таблице.
Табл. 1-2. Поля кода ошибки Биты 31-30 29 28 27-16 15-0 Содержимое: Кем опреде- Код степени «тяже- лен — Майкро- Код подсистемы Зарезервирован Код исключения сти» (severity) софт или поль- (facility code) зователем Значение: 0 = успех; Первые 256 1 = информация; Определяется 0 = Майкрософт; значений опре- 2 = предупрежде- Должен быть 0 Майкрософт или 1 = пользователь деляются Майк- ние; пользователем рософт 3 = ошибка Подробнее об этих полях я рассказываю в главе 24. На данный момент единст- венное важное для вас поле — бит 29. Майкрософт обещает, что все коды оши- бок, генерируемые ее функциями, будут содержать 0 в этом бите. Если вы опре- деляете собственный код ошибки, запишите сюда 1. Тогда у вас будет гарантия, что ваш код ошибки не войдет в конфликт с кодом, определенным Майкро- софт, — ни сейчас, ни в будущем. Заметьте, что код Facility может принимать 4096 возможных значений, из которых первые 256 Майкрософт зарезервировала для собственных нужд, а остальные доступны для использования в приложениях всем желающим. 8 Часть I. Материалы для обязательного чтения Программа-пример ErrorShow Эта программа, «01 ErrorShow. exe» (см.