Расширенные ошибки MAPI
Область применения: Outlook 2013 | Outlook 2016
Разработчики методов интерфейса могут просто возвращать успех (S_OK) и сбой (MAPI_E_CALL_FAILED) или различать условия ошибок, возвращая столько значений ошибок, сколько имеет смысл для ситуации. В большинстве случаев можно использовать одно из значений ошибок, определенных MAPI в MAPICODE. Файл заголовка H. Однако в ситуациях, которые не охватываются предопределенным значением, можно использовать значение MAPI_E_EXTENDED_ERROR. MAPI_E_EXTENDED_ERROR указывает вызывающей на наличие дополнительных сведений об ошибке. Вызывающий объект получает дополнительные сведения, вызывая метод GetLastError для того же объекта, который вернул MAPI_E_EXTENDED_ERROR.
Метод GetLastError можно вызвать для получения сведений о любом коде ошибки, а не только MAPI_E_EXTENDED_ERROR. Многие объекты MAPI реализуют интерфейсы, включающие метод GetLastError . GetLastError возвращает одну структуру MAPIERROR , которая теоретически включает объединение всех ошибок, созданных при предыдущем вызове метода. Дополнительные сведения см. в разделе MAPIERROR. Как вызывающему объекту разумно не полагаться на наличие этих дополнительных сведений об ошибке, так как для их предоставления не требуется. Однако настоятельно рекомендуется, чтобы всякий раз, когда средства реализации возвращают MAPI_E_EXTENDED_ERROR, они позволяют вызывающим получать структуру MAPIERROR с полезной информацией об ошибке.
Так как GetLastError также является функцией API, которая является частью Windows SDK, можно легко забыть, что в MAPI GetLastError является методом интерфейса и может вызываться только для объектов MAPI. Еще одной легкой ошибкой является вызов Метода GetLastError для неправильного объекта. Метод GetLastError должен вызываться для объекта, создающего ошибку. Например, если клиент выполняет вызов сеанса и MAPI перенаправит его поставщику услуг для выполнения работы, клиент не должен вызывать Метод GetLastError для объекта поставщика услуг. IMAPISession::GetLastError является правильным вызовом; Метод GetLastError должен вызываться для объекта сеанса. Дополнительные сведения см. в разделе IMAPISession::GetLastError.