Поделиться через


Обработка ошибок в MAPI

Область применения: Outlook 2013 | Outlook 2016

Значения успешного выполнения, предупреждения и ошибки возвращаются с помощью 32-разрядного числа, известного как дескриптор результата или HRESULT. HRESULT на самом деле не дескриптор ни к чему; это просто 32-битовое значение с несколькими полями, закодированными в значении. Нулевой результат указывает на успешное выполнение, а ненулевой результат — на сбой.

MAPI на 32-разрядных платформах работает только со значениями HRESULT.

На следующем рисунке показан формат HRESULT для 32-разрядных платформ.

Формат HRESULT

Формат HRESULT HRESULT

Бит высокого порядка в HRESULT указывает, представляет ли возвращаемое значение успех или сбой. Если задано значение нуля, значение указывает на успешное выполнение. Если задано значение 1, это указывает на сбой.

Биты R, C, N и r зарезервированы в HRESULT.

Поле средства в обеих версиях указывает область ответственности за ошибку. Существует несколько средств, но подавляющее большинство ошибок MAPI используют FACILITY_ITF для представления ошибок интерфейса. В настоящее время используются наиболее распространенные средства: FACILITY_NULL, FACILITY_ITF, FACILITY_DISPATCH, FACILITY_RPC и FACILITY_STORAGE. Если требуются новые объекты, корпорация Майкрософт выделяет их, так как они должны быть уникальными. В следующей таблице описаны различные поля средств.

Facility Описание
FACILITY_NULL
Для широко применимых общих кодов состояния, таких как S_OK или E_OUTOF_MEMORY; значение равно нулю.
FACILITY_ITF
Для большинства кодов состояния, возвращаемых методами интерфейса; значение определяется интерфейсом . То есть два значения HRESULT с точно одинаковым 32-разрядным значением, возвращаемым из двух разных интерфейсов, могут иметь разное значение.
FACILITY_DISPATCH
Для ошибок интерфейса IDispatch поздней привязки.
FACILITY_RPC
Для кодов состояния, возвращаемых из удаленных вызовов процедур.
FACILITY_STORAGE
Для кодов состояния, возвращаемых из вызовов методов IStorage или IStream , связанных со структурированным хранилищем. Коды состояния со значениями кода (менее 16 бит) в диапазоне кодов ошибок Windows (то есть менее 256) имеют то же значение, что и соответствующие ошибки Windows.

Поле кода — это уникальный номер, который назначается для представления ошибки или предупреждения.