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


C6214

Обновлен: Ноябрь 2007

C6214

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

Это предупреждение указывает на приведение HRESULT к логическому типу. Значение успешного выполнения (S_OK) для типа HRESULT равно 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.