从中获得的返回值 返回HRESULT是其中之一 以下:[S_OK - >成功], [E_NOTIMPL - >失败]
底部的示例返回E_INVALIDARG
和NOERROR
。
据我所知E_INVALIDARG
不是S_OK
,也不是NOERROR
,所以你做什么?你检查无效指针还是不检查?
COM似乎是一切的基础,而且我找不到关于简单IDispatch
的正确行为的一个很好的信息来源。您如何解决生产代码中的这种不一致问题?
答案 0 :(得分:6)
使用COM时,除非确实需要对这些值进行特殊处理,否则不应检查特定的返回值。相反,当您只需要知道呼叫是否失败或成功时,您应该使用FAILED或SUCCEEDED宏。即。
HRESULT hr = ...;
if (FAILED(hr)) {
...
COM调用通常可以返回比文档中指定的范围更广的错误代码。被调用的函数不是唯一的错误来源。根据实际调用(进程内,进程外,DCOM),COM系统本身可以返回大量错误。
答案 1 :(得分:1)
NOERROR
定义为与S_OK
完全相同的值。在解除引用之前检查空指针是任何方法中的好样式,但在此示例中它应返回E_POINTER
。
值NOERROR
/ S_OK
和E_NOTIMPL
是您应该从该方法中获得的最典型值,除非您滥用该方法,该列表当然可以省略E_POINTER
等代码
无论如何都不针对特定代码,请使用SUCCEEDED
/ FAILED
宏。