次の方法で共有


C6226

警告 C6226: 意味の異なる整数型の間の暗黙的なキャストです: -1 を HRESULT に割り当てています。E_FAIL を代わりに使用してください。

この警告は、HRESULT が明示的な値 -1 によって代入または初期化されることを示します。この警告は、多くの場合、整数と HRESULT 型が不適切に使用された場合に発生します。成功を示すには、記号定数 S_OK を使用してください。失敗を示すには、E_constant で始まる記号定数を使用してください。

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

使用例

この警告が発生するコード例を次に示します。

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = -1;
    // code ...
  }
  else
  {
    // code ...
  }
}

この警告を解決するには、次のコードを使用します。

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = E_FAIL;
    // code ...
  }
  else
  {
    // code ...
  }
}

この警告では、SCODE 型は HRESULT と等価です。

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