更新 : 2007 年 11 月
警告 C6220 - 意味の異なる整数型の間の暗黙的なキャストです: HRESULT を -1 と比較しています。代わりに、SUCCEEDED または FAILED マクロを使用してください。
この警告は、HRESULT が明示的な非 HRESULT 値の -1 と比較されていることを示します。これは、整形式 HRESULT ではありません。HRESULT (E_FAIL) での失敗は、-1 によって表されません。したがって、HRESULT の整数への暗黙的なキャストにより、不適切な値が生成され、不正な結果が得られる可能性があります。
使用例
多くの場合、この警告が生成されるのは、コード内で HRESULT が返されるという誤った想定で使用した関数から、–1 を失敗値として使用した整数が返された場合です。この警告が発生するコード例を次に示します。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
SUCCEEDED マクロまたは FAILED マクロを使用して HRESULT の値をテストすることをお勧めします。この警告を解決するには、次のコードを使用します。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
この警告では、SCODE 型は HRESULT と等価です。
明示的な比較は、E_FAIL など特定の HRESULT 値をチェックする場合に適しています。そうでない場合は SUCCEEDED マクロまたは FAILED マクロを使います。