C6216

警告 C6216:语义不同的整数类型之间由编译器插入的强制转换: Boolean 类型转换为 HRESULT

此警告意味着,布尔值在未进行显式强制转换的情况下用作 HRESULT。 布尔类型通过非零值指示成功;HRESULT 中的成功 (S_OK) 则是由值 0 指示。 在作为 HRESULT 测试时,返回布尔值 false 的函数的典型失败值为成功状态。 这可能会导致不正确的结果。

示例

下面的代码生成此警告:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // code ...
  return IsEqual(riid1, riid2);  
}

若要更正此警告,请使用下面的代码:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual(riid1, riid2) == TRUE)
  {
    // code ...
    return S_OK;
  }
  else
  {
    // code ...
    return E_FAIL;
  }
}

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

有关更多信息,请参见 SUCCEEDED Macro(SUCCEEDED 宏)和 FAILED Macro(FAILED 宏)。