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


Исключения


СОМ имеет специфическую поддержку выбрасывания (throwing) исключительных ситуаций из реализации методов. Поскольку в языке C++ не существует двоичного стандарта для исключений, СОМ предлагает явные API-функции для выбрасывания и перехвата объектов СОМ-исключений:

// throw an exception // возбуждаем исключения HRESULT SetErrorInfo([in] ULONG reserved, // m.b.z. [in] IErrorlnfo *pei); // catch an exception // перехватываем исключение HRESULT GetErrorInfo([in] ULONG reserved, // m.b.z. [out] IErrorInfo **ppei);

Процедура SetErrorInfo вызывается из реализации метода, чтобы связать объект исключения с текущим логическим потоком (logical thread). GetErrorInfo выбирает объект исключения из текущего логического потока и сбрасывает исключение, так что следующие вызовы GetErrorInfo возвратят S_FALSE, показывая тем самым, что необработанных исключений нет. Как следует из приведенных ниже подпрограмм, объекты исключений должны поддерживать по крайней мере интерфейс IErrorInfo:

[ object, uuid(1CF2B120-547D-101B-8E65-08002B2BD119) ] interface IErrorInfo: IUnknown { // get IID of interface that threw exception // получаем IID того интерфейса, который возбудил исключение HRESULT GetGUID([out] GUID * pGUID); // get class name of object that threw exception // получаем имя класса того объекта, который возбудил исключение HRESULT GetSource([out] BSTR * pBstrSource); // get human-readable description of exception // получаем читабельное описание исключения HRESULT GetDescription([out] BSTR * pBstrDescription); // get WinHelp filename of documentation of error // получаем имя файла WinHelp, содержащего документацию об ошибке HRESULT GetHelpFile([out] BSTR * pBstrHelpFile); // get WinHelp context ID for documentation of error // получаем контекстный идентификатор WinHelp для документации ошибки HRESULT GetHelpContext([out] DWORD * pdwHelpContext); }

Специальные объекты исключений могут выбрать другие специфические для исключений интерфейсы в дополнение к IErrorInfo.

СОМ предусматривает по умолчанию реализацию IErrorInfo, которую можно создать с использованием API-функции СОМ CreateErrorInfo:




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



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