C6215

警告 C6215:语义不同的整数类型之间的强制转换: Boolean 类型转换为 HRESULT

此警告意味着布尔型被强制转换为 HRESULT。 Boolean 类型通过非零值指示成功,而 HRESULT 中的成功 (S_OK) 则是由值 0 指示。 如果将 Boolean 类型强制转换为 HRESULT,然后在测试表达式中使用它,则将产生错误的结果。

当将布尔值用作 SUCCEEDED 或 FAILED 宏(它显式地将参数强制转换成 HRESULT)的参数时,经常会出现此警告。

示例

下面的代码生成此警告:

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning 6215
  {
    // success code ...
  }
  else
  {
    // failure code ...
  }
}

通常,只应将 SUCCEEDED 或 FAILED 宏应用于 HRESULT。

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

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual( riid1, riid2 ) == TRUE) 
  {
    // code for riid1 == riid2
  }
  else
  {
    // code for riid1 != riid2
  }
}

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