§ 12. HRESULT.
Query Interface
и ольшенство функций интерфейсов СОМ возвращают HRESULT. HRESULT – это 32-разрядное значение, разделенное на три поля.
Старший бит HRESULT отмечает, успешно или нет выполнена функция. Это
позволяет определить много кодов возврата и для успеха и для неудачи. Последние
16 битов содержат код возврата. Остальные 15 битов содержит дополнительную
информацию о типе и источнике кода ошибки.
Таблица 12.1.
Распределенные значения HRESULT.
S _ OK
|
Функция отработала успешно.
Значение S _ OK равно 0. [функция возвращает логическую истину]
|
NOERROR
|
То же, что и S _ OK
|
S _ FALSE
|
Функция отработала успешно
и возвращает логическую ложь. Значение S _ FALSE равно 1.
|
E _ UNEXPECTED
|
Неожиданная ошибка
|
E _ NOTIMPL
|
Метод не реализован
|
E _ NOINTERFASE
|
Компонент не поддерживает
запрашиваемый интерфейс. Возвращается Query Interface.
|
E _ OUTOFMEMORY
|
Компонент не может выделить
требуемый объем памяти
|
E _ FAIL
|
Ошибка по неуказанной
причине
|
*Примечание. То, что S _ FALSE
равно 1, а S _ OK равно 0
противоречит практике программирования на С++, где 0 – ложь, а не истина.
Поэтому при использовании HRESULT
необходимо сравнивать коды возврата с S _ FALSE
S _ OK. Пятнадцать
битов – с 30-го по 16-й содержат идентификатор средства. Он указывает, какая
часть операционной системы выдает данный код возврата. [поскольку операционная
система разрабатывает Microsoft, она
зарезервировала право определения идентификаторов средств за собой.]
Таблица 12.2.
Идентификаторы средств, определенные в настоящее
время.
FACILITY _ WINDOWS 8
.
.
.
FACILITY _ WIN32 7
.
.
.
Поскольку группы
разработчиков используют разные идентификаторы средств, коды возврата разных
средств не будут конфликтовать.
|