C6221
警告 C6221: 意味の異なる整数型の間の暗黙的なキャストです: HRESULT を整数と比較しています。SUCCEEDED マクロか FAILED マクロを代わりに使用してください。
この警告は、HRESULT が 0 以外の整数と比較されていることを示します。HRESULT (S_OK) の成功は 0 で表されます。したがって、整数への HRESULT の暗黙的なキャストにより、不適切な値が生成されて、不正な結果が得られる可能性があります。この問題は、実際には HRESULT を返す関数に対して、整数が返されることを誤って予測したときに発生します。
使用例
次のコードでは、HRESULT を整数値に対して比較しているために、この警告が発生します。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
この警告を解決するために、次のコードでは FAILED マクロを使用しています。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
この警告では、SCODE 型は HRESULT と等価です。
詳細については、「SUCCEEDED Macro (SUCCEEDED マクロ)」および「FAILED Macro (FAILED マクロ)」を参照してください。