C6220
Предупреждение C6220: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с -1. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED.
Данное предупреждение означает, что HRESULT сравнивается с явным, не принадлежащим HRESULT значением -1, которое не является HRESULT с правильным форматом. Ошибка в HRESULT (E_FAIL) не представлена значением -1. Поэтому при неявном приведении значения HRESULT к целому числу создается неверное значение, которое, скорее всего, приведет к неверному результату.
Пример
В большинстве случаев данное предупреждение вызывается кодом, ошибочно ожидающим, что функция, которая должна возвращать значение HRESULT, возвращает целое число, используя –1 в качестве значения неудачи. Это предупреждение создается в следующем примере кода:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Для проверки значения HRESULT удобнее использовать макрос SUCCEEDED или FAILED. Для устранения этого предупреждения используйте следующий код:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Для данного предупреждения тип SCODE эквивалентен типу HRESULT.
Явное сравнение следует использовать для проверки конкретных значений HRESULT, например E_FAIL. В противном случае используйте макрос SUCCEEDED или FAILED.
Дополнительные сведения см. в разделах SUCCEEDED Macro и FAILED Macro.