Сущность технологии COM


Методы и их результаты - часть 2


Код серьезности ошибки — SEVERITY_SUCCESS. Это означает, что вызов смог успешно выполнить операцию. Третья составляющая — CONVERTED — означает, что в данном случае было произведено преобразование базового файла для поддержки структурированного хранилища. HRESULT-значения, являющиеся универсальными и не привязанными к определенной технологии, используют FACILITY_NULL, и их символическое имя не содержит префикса кода устройства. Вот некоторые стандартные имена HRESULT-значений с кодом FACILITY_NULL:

S_OK - успешная нормальная операция S_FALSE - используется для возвращения логического false в случае успеха E_FAIL - общий сбой E_NOTIMPL - метод не реализован E_UNEXPECTED - метод вызван в неподходящее время

FACILITY_ITF используется в специфически интерфейсных HRESULT-значениях и является в то же время единственным допустимым кодом устройства для HRESULT, определяемых пользователем. При этом значения FACILITY_ITF должны быть уникальными в контексте каждого отдельного интерфейса. Стандартные заголовки определяют макрос MAKE_HRESULT для определения пользовательского HRESULT из трех необходимых полей:

const HRESULT CALC_E_IAMHOSED = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0х200 + 15);

Для пользовательских HRESULT принято соглашение, что значения информационного кода должны превышать 0х200, чтобы избежать повторного использования значений, уже задействованных в системных HRESULT-значениях. Хотя это не опасно, таким образом предотвращается повторное использование значений, уже имеющих смысл для стандартных интерфейсов. Например, большинство HRESULT имеют текстовые описания для пользователя, которые можно получить на этапе выполнения с помощью функции API FormatMessage. Выбор HRESULT, не пересекающихся со значениями, определенными в системе, служит гарантией того, что неверные сообщения об ошибках не будут получены.

Чтобы позволить методам возвращать логический результат, не имеющий отношения к их физическому HRESULT-значению, язык СОМ IDL поддерживает атрибут параметров retval.


Начало  Назад  Вперед



Книжный магазин