C6221
警告 C6221:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与一个整数进行比较。 应考虑改用 SUCCEEDED 或 FAILED 宏
此警告意味着要将 HRESULT 与非零整数进行比较。 HRESULT (S_OK) 中的成功由 0 表示。 因此,如果将 HRESULT 隐式强制转换为整数,则将生成错误的值并可能导致错误的结果。 通常,产生此警告的原因在于,代码错误地认为某个函数应返回整数,而该函数实际上返回 HRESULT。
示例
在下面的代码中,因为将 HRESULT 与整数值进行比较,所以会生成此警告:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
为了更正此警告,下面的代码使用 FAILED 宏:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
对于此警告,SCODE 类型等效于 HRESULT。
有关更多信息,请参见 SUCCEEDED Macro(SUCCEEDED 宏)和 FAILED Macro(FAILED 宏)。