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.