我刚刚在处理 HRESULT 返回值时遇到了一些非常尴尬的事情,似乎成功为 0,失败为 1。这背后的逻辑是什么?
我实际上尝试过if(!hr)
并悲惨地失败了,浪费了我生命的一个小时,直到我发现实际的成功 retval 是 0。我想称想到这个的人是白痴,但我会尽力冷静下来 - 希望有人能提供一些线索关于本次公约。
HRESULT 的最初目的是正式列出供公共和 Microsoft 内部使用的错误代码范围,以防止 OS/2 操作系统的不同子系统中的错误代码之间发生冲突。
这就是为什么值 0(HRESULT 的最高位)意味着“没有错误”,即成功。
但应该小心,因为 HRESULT 的最高位可能设置为 0,而其他位设置为不同于 0。这意味着,检查if(0 == hr) { ... }
对于某些成功案例可能不起作用。检查是否成功的正确方法是if(0 <= hr) { ... }
.
维基百科有更详细的信息 http://en.wikipedia.org/wiki/HRESULT.
SUCCEEDED http://msdn.microsoft.com/en-us/library/windows/desktop/ms687197%28v=vs.85%29.aspx and FAILED http://msdn.microsoft.com/en-us/library/windows/desktop/ms693474%28v=vs.85%29.aspx宏可用于避免处理 HRESULT 值时出现错误。if(0 <= hr) { ... }
and if(SUCCEEDED(hr)) { ... }
基本上是相同的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)