C6225
更新 : 2007 年 11 月
警告 C6225: 意味の異なる整数型の間の暗黙的なキャストです: 1 または TRUE を HRESULT に割り当てています。S_FALSE を代わりに使用してください。
この警告は、HRESULT の代入または初期化が明示的な値 1 によって行われていることを示します。Boolean 型は 0 以外の値によって成功を示しますが、HRESULT では値 0 によって成功 (S_OK) を示します。この警告は、Boolean 型と HRESULT 型を間違って使用することが原因となって頻繁に生成されます。成功を示すには、記号定数 S_OK を使用してください。
使用例
次のコードでは、HRESULT の代入によってこの警告が発生します。
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
// code ...
hr = S_OK;
}
else
{
// code ...
hr = 1;
}
}
この警告を解決するには、次のコードを使用します。
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
hr = S_OK;
// code ...
}
else
{
hr = S_FALSE;
// code ...
}
}
この警告では、SCODE 型は HRESULT と等価です。
失敗を示すには、E_FAIL など別の定数を使用してください。