C++ 哪个HRESULT文字常量将使successed()宏失败?
成功定义():C++ 哪个HRESULT文字常量将使successed()宏失败?,c++,hresult,C++,Hresult,成功定义():#定义成功(hr)(((HRESULT)(hr))>=0) 背景:单击对话框上的“确定”按钮时,我需要返回HRESULT值hr,以便成功(hr)为真。如果单击“取消”按钮,我需要返回一个负值。我本可以使用bools,但这将打破现有模式(通常hr值来自系统dll的深度)。因此,我知道我可以在OK时返回S_OK,但在Cancel时返回什么?我可以返回(HRESULT)-1,但必须有更好的方法-某些HRESULT文字常量具有负值并表示一般故障S_FALSE不是它,因为它的值定义为1L 请
#定义成功(hr)(((HRESULT)(hr))>=0)
背景:单击对话框上的“确定”按钮时,我需要返回HRESULT
值hr
,以便成功(hr)
为真。如果单击“取消”按钮,我需要返回一个负值。我本可以使用bools,但这将打破现有模式(通常hr值来自系统dll的深度)。因此,我知道我可以在OK时返回S_OK
,但在Cancel时返回什么?我可以返回(HRESULT)-1代码>,但必须有更好的方法-某些HRESULT文字常量具有负值并表示一般故障S_FALSE
不是它,因为它的值定义为1L
请帮我找到正确的常数。可能E_ABORT典型值如下所示:
E_FAIL或E_ABORT似乎是最明显的。E_FAIL
或E_ABORT
。然而,这带来了一个更大的问题,即如果您只想检查S\u OK
,就不应该使用succeed(hr)
As,E\u ABORT
(或E\u FAIL
)可能会很好地满足您的需要,或者您可以使用MAKE\u HRESULT()
宏或HRESULT\u FROM\u WIN32()
设计自己的,前提是存在与您想要指示的内容匹配的WIN32错误代码
可能是来自WIN32的HRESULT\u(错误\u已取消)
?谢谢。。。因此,所有E_*值都会使成功(hr)
?+1失败。同意,这里使用successed是错误的。S_FALSE是已取消对话框的逻辑返回值,因此请与S_OK进行比较。