Compartir a través de


C6226

Advertencia C6226: Conversión implícita entre tipos enteros semánticamente diferentes: asignando -1 a HRESULT.Considere utilizar E_FAIL en su lugar.

Esta advertencia indica que HRESULT se va a asignar o inicializar con el valor de -1 explícito.Esta advertencia se genera con frecuencia a causa de una confusión accidental de los tipos integer y HRESULT.Para indicar una operación correcta, debe utilizarse la constante simbólica S_OK.Para indicar el error, se deben utilizar las constantes simbólicas que comienzan con E_constant.

Para obtener más información, vea las macros SUCCEEDED y FAILED.

Ejemplo

El código siguiente genera esta advertencia:

#include <windows.h>

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

Para corregir esta advertencia, utilice el código siguiente:

#include <windows.h>

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

Para esta advertencia, el tipo SCODE es equivalente a HRESULT.

Tenga en cuenta que el uso de las opciones malloc y free (y las API de asignación de memoria dinámica relacionadas) tiene muchos riesgos en cuanto a pérdidas de memoria y excepciones.Para evitar todos estos tipos de problemas de pérdidas de memoria y excepciones, use los mecanismos proporcionados por la Biblioteca de plantillas estándar (STL) de C++.Estos incluyen shared_ptr, unique_ptr y vector.Para obtener más información, vea Punteros inteligentes (C++ moderno) y Referencia de biblioteca estándar de C++.