Поделиться через


C6216

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

Данное предупреждение означает, что в качестве HRESULT используется логическое значение без явного приведения типов. Логические типы указывают успех посредством ненулевого значения; успех (S_OK) в HRESULT обозначается значением 0. Функции, возвращающие логические значения, в случае неудачи, как правило, возвращают значение "false". Однако при проверке этого значения в качестве HRESULT возвращается значение успеха. Это, скорее всего, приведет к неверным результатам.

Пример

Данное предупреждение создается в следующем коде:

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

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

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

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

Для данного предупреждения тип SCODE эквивалентен типу HRESULT.

Дополнительные сведения см. в разделах SUCCEEDED Macro и FAILED Macro.