Предупреждение C6215

Приведение между семантически разными целыми типами: логическим типом в HRESULT

Это предупреждение указывает, что логический объект приведение к объекту HRESULT. Логические типы указывают на успех по значению, отличному от нуля, в то время как успех (S_OK) HRESULT указывается значением 0. Приведение логического типа к логическому типу, а затем его использование в тестовом выражении приведет к HRESULT неправильному результату.

Замечания

Это предупреждение часто возникает, когда логическое значение используется в качестве аргумента SUCCEEDED или FAILED макроса, которое явно приводит их аргументы к HRESULT.

Имя анализа кода: CAST_BOOL_TO_HRESULT

Пример

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

#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 ...
  }
}

Как правило, к ней SUCCEEDEDFAILED следует применять HRESULTтолько макросы.

Чтобы исправить это предупреждение, используйте следующий код:

#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
  }
}

Дополнительные сведения см. в разделе "Макрос УСПЕШНО" и "СБОЙ"