c++ - 如何在 C++ 中使用 HRESULT 条件检查

标签 c++ winapi hresult

HRESULT hr = S_OK; //initialization`
if (int i == 5)
{
    hr = 1; //Is it correct usage?  
}
if (hr == 1)
    cout<<"The value of i is 5";

因为我总是听到 HRESULTE_TIMEOUT 等字符串输出,是否像我使用的那样使用数字是正确的。

最佳答案

这里的主要问题是您将 HRESULT 用于什么目的?

您显然可以为 HRESULT 分配任何值,但为什么不直接使用 int 呢?

HRESULT 用作传达函数调用成功或失败的方式。通常 HRESULTS_OK (0) 或错误(负数)。 S_FALSE(1,不是失败也不是成功)很少使用。

当与 COM 或 .NET 一起使用时,调用者通常只检查函数是成功还是失败。默认情况下,当编码(marshal)返回 HRESULT 的函数时,.NET 的编码(marshal)处理程序会将函数转换为 void 函数,如果结果为负则抛出异常,如果为负则丢弃结果非负。

如果您的代码属于这种情况,则没有必要给出特定的正值。如果您不使用它来实现互操作性,您可能根本不应该使用 HRESULT

关于c++ - 如何在 C++ 中使用 HRESULT 条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60023646/

相关文章:

c++ - 如何理解对象被销毁了?

c++ - 将流转换为函数参数以使用 Telnet 和 Ncurses

c++ - 如何将 LPTSTR 转换为 LPCTSTR?

c++ - Visual Studio 2010 Win32 应用程序无法在 Windows XP 上启动

c++ - 如何在MFC编程中使用GetDHtmlDocument()?

c++ - 临时工的生命周期

c++ - 无休止的While循环会占用CPU资源吗?

c++ - 如何从句柄中获取事件的名称

c++ - 编译器未标记 HRESULT 的错误返回值

c++ - 如何在 E_NOTIMPL 和 E_NOINTERFACE 之间进行选择?