Compartir a través de


C6225

Advertencia C6225: Conversión implícita entre tipos enteros semánticamente diferentes: asignando 1 o TRUE a HRESULT. Considere utilizar en su lugar S_FALSE

Esta advertencia indica que HRESULT se va a asignar o inicializar con el valor explícito de 1. Los tipos booleanos indican una operación correcta mediante un valor distinto de cero; la operación correcta (S_OK) en HRESULT se indica mediante un valor de 0. Esta advertencia se genera con frecuencia a causa de una confusión accidental de los tipos booleanos y HRESULT. Para indicar una operación correcta, debe utilizarse la constante simbólica S_OK.

Ejemplo

En el código siguiente, la asignación de HRESULT genera esta advertencia:

#include <windows.h>

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

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

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

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

Para indicar error, se debe utilizar E_FAIL u otra constante.

Para obtener más información, vea uno de los temas siguientes:

SUCCEEDED

FAILED