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


C6214

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

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

Пример

Данное предупреждение создается в следующем коде:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // 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 и FAILED для проверки значения HRESULT.

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

SUCCEEDED

FAILED

Чтобы использовать современную методологию выделения памяти C++, используйте механизмы, предоставляемым библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.