Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5_TKP_PrCOM.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
556 Кб
Скачать
☆

1.6.2.4 Hresult.

д ля сообщений о результатах работы, компоненты СОМ используют значение HRESULT. Его возвращают большинство функций интерфейсов СОМ, и. в том числе - QueryInterface. HRESULT представляет собой 32-разрядное значение, разделенное на три поля (рис. 5. ). Название возникло по историческим причинам: оно просто расшифровывается как "вот результат" (here's the result), a не "описатель результата" (handle of result).

Определенные системой значения HRESULT содержатся в заголовочном файле Win32 WINERROR.H. В начале файла расположены коды ошибок Win32, так что его нужно пролистать, чтобы добраться до HRESULT. HRESULT похож на код ошибки Win32, но это не одно и то же, и смешивать их не следует.

Старший бит HRESULT, как показано на рис. 5. , отмечает, успешно или нет выполнена функция. Это позволяет определить много кодов возврата и для успеха, и для неудачи. Последние 16 битов содержат собственно код возврата. Остальные 15 битов содержат дополнительную информацию о типе и источнике кода ошибки. В табл. 5. приведены наиболее часто используемые коды. По соглашению в названиях успешных кодов возврата содержится S_, а в названиях кодов ошибок - Е_.

Обратите внимание, что значение S_FALSE равно 1, а значение S_OK - 0. Это противоречит обычной практике программирования на C/C++, где 0 - это ложь, а не-0 - истина. Поэтому при использовании HRESULT обязательно явное сравнение кодов возврата с S_FALSE или S_OK.

Пятнадцать битов - с 30-го по 16-й - содержат идентификатор средства (facility). Он указывает, какая часть операционной системы выдает данный код возврата. Поскольку операционную систему разрабатывает Microsoft, она зарезервировала право определения идентификаторов средств за собой. Идентификаторы средств, определенные в настоящее время, приведены в табл. 5. .

Распространенные значения HRESULT

Таблица 5.

Название

Значение

S_OK

Функция отработала успешно. В некоторых случаях этот код также означает, что функция возвращает логическую истину. Значение S_OK равно 0.

NOERROR

То же, что S_ОК.

S_FALSE

Функция отработала успешно и возвращает логическую ложь. Значение S_FALSE равно 1.

E_UNEXPECTED

Неожиданная ошибка.

E_NOTIMPL

Функция-член не реализована.

E_NOINTERFACE

Компонент не поддерживает запрашиваемый интерфейс. Возвращается Query Interface.

E_OUTOFMEMORY

Компонент не может выделить требуемый объем памяти.

E_FAIL

Ошибка по неуказанной причине.

И дентификатор средства освобождает, например, разработчиков Microsoft, занятых RPC (FACILITY_RPC), от необходимости согласовывать значения кодов возврата с теми, кто работает над управляющими элементами ActiveX (FACILITY_CONTROL). Поскольку группы разработчиков используют разные идентификаторы средств, коды возврата разных средств не будут конфликтовать. Разработчикам специализированных интерфейсов повезло меньше.

Все идентификаторы средств, кроме FACILITY_ITF, задают определенные СОМ универсальные коды возврата. Эти коды всегда и везде одни и те же. FACILITY_ITF - исключение; ему отвечают коды, специфичные для данного интерфейса. Чтобы определить средство для данного HRESULT, необходимо использовать макрос HRESULT_FACILITY, определенный в WINERROR.H. Коды же FACILITY_ITF не уникальны и могут иметь разные значения, в зависимости от интерфейса, возвратившего код.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]