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 宏)。