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