C6214C6214

предупреждение C6214: приведение целочисленных типов с разной семантикой: HRESULT к логическому типуwarning C6214: cast between semantically different integer types: HRESULT to a Boolean type

Это предупреждение означает, что выполняется HRESULT приведение к логическому типу.This warning indicates that an HRESULT is being cast to a Boolean type. Значение успеха ( S_OK ) HRESULT равно 0.The success value (S_OK) of an HRESULT equals 0. Однако значение 0 указывает на сбой логического типа.However, 0 indicates failure for a Boolean type. Приведение HRESULT к логическому типу и его использование в тестовом выражении приведет к неправильному результату.Casting an HRESULT to a Boolean type and then using it in a test expression will yield an incorrect result. Иногда это предупреждение возникает, если объект HRESULT хранится в логической переменной.Sometimes, this warning occurs if an HRESULT is being stored in a Boolean variable. Любое сравнение, использующее логическую переменную для проверки на HRESULT успешность или ошибку, может привести к неверным результатам.Any comparison that uses the Boolean variable to test for HRESULT success or failure could lead to incorrect results.

ПримерExample

Это предупреждение создается в следующем коде:The following code generates this warning:

#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;
  }
}

Чтобы исправить это предупреждение, используйте следующий код:To correct this warning, use the following code:

#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 .For this warning, the SCODE type is equivalent to HRESULT.

Как правило, SUCCEEDED FAILED для проверки значения объекта следует использовать макрос или HRESULT .Usually, the SUCCEEDED or FAILED macro should be used to test the value of an HRESULT.

Дополнительные сведения см. в одном из следующих разделов:For more information, see one of the following topics:

УСПЕШНОSUCCEEDED

ОШИБОКFAILED

Чтобы использовать современные методологии выделения памяти C++, используйте механизмы, предоставляемые библиотекой стандартных шаблонов C++ (STL).To leverage modern C++ memory allocation methodology, use the mechanisms that are provided by the C++ Standard Template Library (STL). К ним относятся shared_ptr, unique_ptrи vector.These include shared_ptr, unique_ptr, and vector. Дополнительные сведения см. в разделе интеллектуальные указатели и Стандартная библиотека C++.For more information, see Smart Pointers and C++ Standard Library.