次の方法で共有


警告 C6230

意味的に異なる整数型間の暗黙的なキャスト: ブール型コンテキストでの HRESULT の使用

解説

この警告は、HRESULT が、それのみで if ステートメントなど、ブール型の結果が予測されるコンテキストで使用されていることを示します。 このテストでは、正しい結果が得られない可能性があります。 たとえば、HRESULT の通常の成功値 (S_OK) は、ブール型としてテストされた場合は失敗を意味します。

コード分析名: USING_HRESULT_IN_BOOLEAN_CONTEXT

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

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (hr)
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

ほとんどの場合は、SUCCEEDED または FAILED マクロを使用して HRESULT の値をテストしてください。 この警告を解決するには、次のコードを使用します。

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (SUCCEEDED(hr))
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

この警告では、SCODE 型は HRESULT として扱われます。

mallocfree (および関連する動的メモリ API) の使用には、メモリ リークと例外の原因として多くの落とし穴があります。 この種のリークや例外の問題を回避するには、C++ 標準ライブラリに用意されているポインター クラスとコンテナー クラスを使用します。 これには、shared_ptrunique_ptrvector などがあります。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。