您如何阅读以下文档?

Cod*_*der 3 c++ com

IDispatch::GetTypeInfoCount

从返回的HRESULT获得的返回值是以下之一:[S_OK - > Success],[E_NOTIMPL - > Failure]

并且底部的样本返回E_INVALIDARG并且NOERROR.

据我所知,E_INVALIDARG不是S_OK,也不是NOERROR,所以你做什么?你检查无效指针还是不检查?

COM似乎是一切的基础,我找不到关于简单行为的正确信息的一个很好的信息来源IDispatch.您如何处理生产代码中的这种不一致?

Fer*_*cio 6

使用COM时,除非确实需要对这些值进行特殊处理,否则不应检查特定的返回值.相反,当您只需要知道呼叫是否失败或成功时,您应该使用FAILED或SUCCEEDED宏.即

HRESULT hr = ...;
if (FAILED(hr)) {
   ...
Run Code Online (Sandbox Code Playgroud)

COM调用通常可以返回比文档中指定的范围更广的错误代码.被调用的函数不是唯一的错误来源.根据实际调用(进程内,进程外,DCOM),COM系统本身可以返回大量错误.