次の方法で共有


C6217

警告 C6217: 意味の異なる整数型の間の暗黙的なキャストです: 'not' を伴う HRESULT をテストしています。代わりに、SUCCEEDED マクロまたは FAILED マクロを使用してください。

この警告は、HRESULT が NOT (!) 演算子でテストされることを示します。HRESULT が成功 (S_OK) の場合、値 0 で示されます。ただし、ブール型の場合、0 はエラーを表します。HRESULT を NOT 演算子 (!) でテストして、実行するコード ブロックを決めると、次のような不適切なコード パスが得られる可能性があります。その影響で予想外の結果が生じます。

使用例

次のコードは、HRESULT 値の成功と失敗を決めるために NOT 演算子が使用されているので、この警告が発生します。この場合、( !hr ) は失敗コードを実行するので、不適切なコード パスが実行されます。

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL); 
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

この警告を解決するには、次のコードに示すように FAILED マクロを使用して失敗を探します。

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);  
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

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

HRESULT の通常の成功値 (S_OK) は、ブール型としてテストされた場合は false です。

HRESULT が成功であるかどうかを確認するには、代わりに SUCCEEDED マクロを使用してください。