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

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

Оглавление ГЛАВА 1 Обработка ошибок ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 2 Вы тоже можете это сделать ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... 7 Программа-пример ErrorShow... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 8 ЧАСТЬ I МАТЕРИАЛЫ ДЛЯ ОБЯЗАТЕЛЬНОГО ЧТЕНИЯ ГЛАВА 1 Обработка ошибок Прежде чем изучать функции, предлагаемые Microsoft Windows, посмотрим, как в них устроена обработка ошибок. Когда вы вызываете функцию Windows, она проверяет переданные ей пара- метры, а затем пытается выполнить свою работу. Если вы передали недопусти- мый параметр или если данную операцию нельзя выполнить по какой-то другой причине, она возвращает значение, свидетельствующее об ошибке. В таблице 1-1 показаны типы данных для возвращаемых значений большинства функций Win- dows. Табл. 1-1. Стандартные типы значений, возвращаемых функциями Windows Тип данных Значение, свидетельствующее об ошибке VOID Функция всегда (или почти всегда) выполняется успешно. Таких функций в Windows очень мало BOOL Если вызов функции заканчивается неудачно, возвращается 0; в остальных случаях возвращаемое значение отлично от 0 (не пытайтесь проверять его на соответствие TRUE, лучше проверить его на соответствие FALSE) HANDLE Если вызов функции заканчивается неудачно, то обычно возвращается NULL; в остальных случаях HANDLE идентифицирует объект, которым Вы можете ма- нипулировать. Будьте осторожны: некоторые функции возвращают HANDLE со значением INVALID_HANDLE_VALUE, равным -1. В документации Plat- form SDK для каждой функции четко указывается, что именно она возвращает при ошибке — NULL или INVALID_HANDLE_VALUE PVOID Если вызов функции заканчивается неудачно, возвращается NULL; в осталь- ных случаях PVOID сообщает адрес блока данных в памяти Глава 1. Обработка ошибок. docx 3 Табл. 1-1. (окончание) Тип данных Значение, свидетельствующее об ошибке LONG Это значение — «крепкий орешек». Функции, которые сообщают или DWORD значения каких-либо счетчиков, обычно возвращают LONG или DWORD. Если по какой-то причине функция не сумела сосчитать то, что вы хотели, она обычно возвращает 0 или -1 (все зависит от конкретной функции). Если вы используете одну из таких функций, проверьте по документации Plat- form SDK, каким именно значением она уведомляет об ошибке При возникновении ошибки вы должны разобраться, почему вызов данной функции оказался неудачен. За каждой ошибкой закреплен свой код — 32-битное число. Функция Windows, обнаружив ошибку, через механизм локальной памяти по- тока сопоставляет соответствующий код ошибки с вызывающим потоком. (Ло- кальная память потока рассматривается в главе 21) Это позволяет потокам рабо- тать независимо друг от друга, не вмешиваясь в чужие ошибки.