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 и FAILED Macro.