Compartir a través de


C6216

Advertencia C6216: Conversión insertada por el compilador entre tipos enteros semánticamente diferentes: un tipo booleano de HRESULT

Esta advertencia indica que se utiliza un booleano como HRESULT sin una conversión explícita.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.El valor de error típico para las funciones que devuelven un valor booleano falso es un estado correcto cuando se prueba como HRESULT.Es probable que esto produzca resultados incorrectos.

Ejemplo

El código siguiente genera esta advertencia:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // code ...
  return IsEqual(riid1, riid2);  
}

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

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual(riid1, riid2) == TRUE)
  {
    // code ...
    return S_OK;
  }
  else
  {
    // code ...
    return E_FAIL;
  }
}

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

Para obtener más información, vea el tema sobre la macro SUCCEEDED y la macro FAILED.