次の方法で共有


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 マクロ)」を参照してください。