次の方法で共有


C6217

更新 : 2007 年 11 月

警告 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 マクロを使用してください。

参照

その他の技術情報

SUCCEEDED

FAILED