次の方法で共有


警告 C6214

意味的に異なる整数型間のキャスト: HRESULT からブール型

この警告は、HRESULT が Boolean 型にキャストされることを示します。 S_OK の成功値 (HRESULT) は 0 に等しくなります。 ただし、ブール型の場合、0 はエラーを表します。 HRESULT を Boolean 型にキャストしてからテスト式で使用すると、不適切な結果が生じます。

解説

場合によっては、HRESULT が Boolean 変数に格納されているときにこの警告が発生することがあります。 Boolean 変数を比較に使用して HRESULT の成功または失敗をテストすると、不適切な結果が生じる可能性があります。

コード分析名: CAST_HRESULT_TO_BOOL

次のコードでは、警告 C6214 が生成されます。

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning C6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

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

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr))
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

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

通常、SUCCEEDED マクロまたは FAILED マクロは、HRESULT の値をテストするために使用されます。

詳細については、以下の記事のいずれかを参照してください。

SUCCEEDED

FAILED

最新の C++ メモリ割り当て手法を利用するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。