Поделиться через


C6219

Предупреждение C6219: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с 1 или TRUE. Попробуйте вместо этого использовать макро SUCCEEDED или FAILED

Данное предупреждение означает, что HRESULT сравнивается с явным, не принадлежащим HRESULT значением 1. Это может привести к некорректным результатам, так как типичное значение успеха HRESULT (S_OK) равно 0; сравнение с логическим типом неявно преобразовывает его в значение false.

Пример

Это предупреждение возникает в следующем примере кода, поскольку CoGetMalloc возвращает значение HRESULT, которое затем сравнивается с TRUE:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Как правило, это предупреждение возникает при ошибочном сравнении HRESULT с логическим значением. Рекомендуется использовать макросы SUCCEEDED или FAILED для проверки значения HRESULT. Для устранения этого предупреждения используйте следующий код:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Для данного предупреждения тип SCODE эквивалентен типу HRESULT.