Предупреждение C6214

Приведение между семантически разными целыми типами: HRESULT к логическому типу

Это предупреждение указывает на то, что HRESULT логическое значение приведения к логическому типу. Значение успешного HRESULT выполнения (S_OK) равно 0. Однако 0 указывает на сбой логического типа. HRESULT Приведение к логическому типу, а затем использование его в тестовом выражении приведет к неправильному результату.

Замечания

Иногда это предупреждение возникает HRESULT при хранении в логическое значение переменной. Любое сравнение, использующее логическое значение переменной для HRESULT проверки успешности или сбоя, может привести к неправильным результатам.

Имя анализа кода: CAST_HRESULT_TO_BOOL

Пример

Следующий код создает предупреждение C6214:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning C6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Чтобы исправить это предупреждение, используйте следующий код:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr))
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

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

SUCCEEDED Обычно для проверки значения HRESULTзначения следует использовать макрос или FAILED макрос.

Дополнительные сведения см. в следующих статьях:

SUCCEEDED

FAILED

Чтобы использовать современную методологию выделения памяти C++, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptrи контейнеры, такие как.shared_ptrvector Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".