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


C6226

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

Данное предупреждение указывает, что результату HRESULT явно присваивается значение -1 или он инициализируется этим значением.Это предупреждение часто создается из-за случайного использования целочисленного типа вместо типа HRESULT.Для обозначения успеха следует использовать символьную константу S_OK.Для обозначения неудачи следует использовать символическую константу, начинающуюся со знаков E_.

Для получения дополнительных сведений см. макросы SUCCEEDED и FAILED

Пример

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

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = -1;
    // code ...
  }
  else
  {
    // code ...
  }
}

Для устранения этого предупреждения используйте следующий код:

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = E_FAIL;
    // code ...
  }
  else
  {
    // code ...
  }
}

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

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