Advertencia C6215

Conversión entre tipos enteros semánticamente diferentes: un tipo booleano a HRESULT

Esta advertencia indica que se va a convertir un valor booleano en HRESULT. Los tipos booleanos indican una operación correcta mediante un valor distinto de cero; mientras que la operación correcta (S_OK) en HRESULT se indica mediante un valor de 0. Convertir un tipo booleano en un valor HRESULT y usarlo luego en una expresión de prueba da lugar a un resultado incorrecto.

Comentarios

Esta advertencia se produce con frecuencia cuando se usa un valor booleano como argumento para una macro SUCCEEDED o FAILED, que convierte explícitamente sus argumentos en un valor HRESULT.

Nombre del análisis de código: CAST_BOOL_TO_HRESULT

Ejemplo

El código siguiente genera esta advertencia:

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning C6215
  {
    // success code ...
  }
  else
  {
    // failure code ...
  }
}

Por lo general, las macros SUCCEEDED o FAILED solo se deben aplicar a HRESULT.

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

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual( riid1, riid2 ) == TRUE)
  {
    // code for riid1 == riid2
  }
  else
  {
    // code for riid1 != riid2
  }
}

Para más información, consulte Macro SUCCEEDED y Macro FAILED.