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进行比较。