次の方法で共有


C6220

警告 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 マクロを使います。

詳細については、「SUCCEEDED Macro (SUCCEEDED マクロ)」および「FAILED Macro (FAILED マクロ)」を参照してください。

malloc と free (および関連する動的メモリ割り当て API) の使用には、メモリ リークと例外に関して多くの落とし穴があることに注意してください。これらのリークと例外の問題を完全に回避するには、C++ の標準テンプレート ライブラリ (STL) によって提供される機構を使用します。これには、shared_ptrunique_ptrvector などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。