C6230

警告 C6230:语义不同的整数类型之间的隐式强制转换: 在 Boolean 上下文中使用 HRESULT

此警告意味着在应当使用布尔值结果的上下文(如 if 语句)中使用了 bare HRESULT。 这有可能会产生不正确的结果。 例如,在作为布尔值测试时,HRESULT 的典型成功值 (S_OK) 是 false。

示例

下面的代码生成此警告:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (hr)
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

在大多数情况下,应将 SUCCEEDEDFAILED 宏用来测试 HRESULT 的值。 若要更正此警告,请使用下面的代码:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

对于此警告,SCODE 类型等效于 HRESULT。