从记录的标准 COM 对象返回未记录的 HRESULTS 的规则是什么?
我正在查看 的文档IObjectWithSite.SetSite
,其中说我应该S_OK
在所有情况下返回:
句法
HRESULT SetSite(IUnknown *pUnkSite);
参数
- pUnkSite : [in] 指向管理此对象的站点的接口指针。如果为 NULL,则对象应调用IUnknown::Release以释放现有站点。返回值
在所有情况下都返回 S_OK。
这很好。但后来我正在查看一篇 MSDN 文章,详细介绍了编写浏览器帮助器对象,并且有他的代码IObjectWithSite.SetSite
,它返回 S_OK 以外的 HRESULTS:
E_INVALIDARG
如果 pUnkSite 为 NULLE_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(); }
如果 pUnkSite 为 NULL代码返回的事实E_INVALIDARG
看起来像一个错误,文档特别说明参数可以为 null。
该文档没有提到任何其他 HRESULTS 作为可能的返回值 - 实际上它说在所有情况下都S_OK
将返回?
当然,他们不可能是认真的;它们不能代表所有情况。正确的?如果由于有人拔出 RAM 棒而导致内存不足或内存保护故障怎么办?
从记录的标准 COM 对象返回未记录的 HRESULTS 的规则是什么?