§ 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, она
зарезервировала право определения идентификаторов средств за собой.]
Идентификаторы средств, определенные в настоящее
время.
FACILITY _ WINDOWS 8
.
.
.
FACILITY _ WIN32 7
.
.
.