Обработка ошибок в MAPI
Область применения: Outlook 2013 | Outlook 2016
Значения успешного выполнения, предупреждения и ошибки возвращаются с помощью 32-разрядного числа, известного как дескриптор результата или HRESULT. HRESULT на самом деле не дескриптор ни к чему; это просто 32-битовое значение с несколькими полями, закодированными в значении. Нулевой результат указывает на успешное выполнение, а ненулевой результат — на сбой.
MAPI на 32-разрядных платформах работает только со значениями HRESULT.
На следующем рисунке показан формат HRESULT для 32-разрядных платформ.
Формат 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. |
Поле кода — это уникальный номер, который назначается для представления ошибки или предупреждения.