Сущность технологии СОМ. Библиотека программиста | страница 74



. GetErrorInfo выбирает объект исключения из текущего логического потока и сбрасывает исключение, так что следующие вызовы GetErrorInfo возвратят SFALSE, показывая тем самым, что необработанных исключений нет. Как следует из приведенных ниже подпрограмм, объекты исключений должны поддерживать по крайней мере интерфейс 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:


HRESULT CreateErrorInfo([out] ICreateErrorInfo **ppcei);


В дополнение к IErrorInfo объекты исключений по умолчанию открывают интерфейс ICreateErrorInfo, чтобы позволить пользователю инициализировать состояние нового исключения:


[ object, uuid(22F03340-547D-101B-8E65-08002B2BD119) ]

interface ICreateErrorInfo: IUnknown

{

// set IID of interface that threw exception

// устанавливаем IID интерфейс, который возбудил исключение

HRESULT SetGUID([in] REFGUID rGUID);

// set class name of object that threw exception

// устанавливаем классовое имя объекта, который возбудил исключение

HRESULT SetSource([in, string] OLECHAR* pwszSource);

// set human-readable description of exception

// устанавливаем читабельное описание исключения

HRESULT SetDescription([in, string] OLECHAR* pwszDesc);

// set WinHelp filename of documentation of error

// устанавливаем имя файла WinHelp, содержащего документацию об ошибке

HRESULT SetHelpFile([in, string] OLECHAR* pwszHelpFile);

// set WinHelp context ID for documentation of error