Страница 40 из 111
ISupportErrorlnfo::lnterfaceSupportsErrorlnfo Позволяет определить, поддерживает ли данный интерфейс интерфейс lErrorlnfo. HRESULT InterfaceSupportsErrorInfo ( REFIID riid );
Параметр: - riid - Устанавливаетает идентификатор интерфейса.
Коды возврата: Из возвращенного HRESULT получают один из следующих кодов возврата: Код возврата | Значение | S_OK | Интерфейс поддерживает lErrorlnfo. | S_FALSE | Интерфейс не поддерживает lErrorlnfo. | Комментарии: Объект, поддерживающий lErrorlnfo, обязан реализовывать ISupportErrorlnfo. Программе, получившей код ошибки, следует вызвать QueryInterface для получения указателя на интерфейс ISupportErrorlnfo, после чего вызвать InterfaceSupportsErrorlnfo с IID интерфейса, возвратившего код ошибки. Если InterfaceSupportsErrorlnfo возвращает S_FALSE, то объект-ошибка представляет ошибку, возвращенную не вызывавшимся объектом, а кем-то еще. В данном случае объект-ошибку следует считать неверным и не использовать. Если ISupportErrorlnfo возвращает S_OK, то указатель на объект-ошибку можно получить с помощью GetErrorlnfo. Пример: Ниже приведена реализация ISupportErrorlnfo из примера Lines. Эта реализация также поддерживает методы AddRef, Release и QueryInterface, унаследованные от IUnknown. CSupportErrorInfo::CSupportErrorInfo(IUnknown FAR* punkObject, REFIID riid) { m_punkObject = punkObject; m_iid = riid; };
STDMETHODIMP CSupportErrorInfo::QueryInterface(REFIID iid, void FAR* FAR* ppv) { return m_punkObject->QueryInterface(iid, ppv); };
STDMETHODIMP_(ULONG) CSupportErrorlnfo::AddRef (void) { return m_punkObject->AddRef(); };
STDMETHODIMP_(ULONG) CSupportErrorlnfo::Release(void) { return m_punkObject->Release(); };
STDMETHODIMP CSupportErrorInfo::InterfaceSupportsErrorInfo(REFIID riid) { return (riid == m_iid) ? NOERROR : ResultFromScode(S_FALSE); };
|