Каково правило возврата недокументированных HRESULTS из документированных стандартных объектов COM?
Я смотрю документацию для IObjectWithSite.SetSite
, в которой говорится, что я должен вернуть S_OK
в во всех ситуациях:
Синтаксис
HRESULT SetSite(IUnknown *pUnkSite);
Параметры
- pUnkSite :
[in] Указатель интерфейса на сайт, управляющий этим объектом. Если NULL, объект должен вызвать IUnknown :: Release , чтобы освободить существующий сайт.
Возвращаемое значение
Возвращает S_OK при любых обстоятельствах.
Что хорошо. Но затем я смотрю на статью MSDN, подробно описывающую написание объекта Browser Helper, и есть его код для IObjectWithSite.SetSite
, и он возвращает HRESULTS, отличный от S_OK:
E_INVALIDARG
если pUnkSite равен NULL
E_INVALIDARG
, если pUnkSite не поддерживает IWebBrowser2
E_POINTER
, если webBrowser не поддерживает IConnectionPointContainer
- результат подключения к событию в противном случае (т.е.
S_OK
)
HRESULT CViewSource::SetSite(IUnknown *pUnkSite)
{
// Retrieve and store the IWebBrowser2 pointer
m_spWebBrowser2 = pUnkSite;
if (m_spWebBrowser2 == NULL)
return E_INVALIDARG;
// Retrieve and store the IConnectionPointerContainer pointer
m_spCPC = m_spWebBrowser2;
if (m_spCPC == NULL)
return E_POINTER;
// Retrieve and store the HWND of the browser. Plus install
// a keyboard hook for further use
RetrieveBrowserWindow();
// Connect to the container for receiving event notifications
return Connect();
}
Тот факт, что код возвращает E_INVALIDARG
, если pUnkSite имеет значение NULL, выглядит как ошибка, в документации конкретно сказано, что параметр может быть нулевым.
В документации не упоминаются никакие другие HRESULTS в качестве возможных возвращаемых значений - фактически говорится, что S_OK
должен быть возвращен при любых обстоятельствах ?
Конечно, они не могут быть серьезными; они не могут означать все обстоятельства. Правильно? Что делать, если нехватка памяти или сбой защиты памяти из-за того, что кто-то вытащил карту памяти?
Каково правило возврата недокументированных HRESULTS из документированных стандартных объектов COM?