C6219
警告 C6219: 意味の異なる整数型の間の暗黙的なキャストです: HRESULT を 1 または TRUE と比較しています。代わりに、SUCCEEDED マクロまたは FAILED マクロを使用してください。
この警告は、HRESULT 以外の明示的な値 1 と HRESULT が比較されていることを示します。HRESULT の一般的な成功値 (S_OK) は 0 であり、これをブール型と比較すると暗黙的に false に変換されるため、正しい結果が得られない可能性があります。
使用例
次に示すコードでは、CoGetMalloc によって HRESULT が返され、それが TRUE と比較されるため、この警告が生成されます。
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
ほとんどの場合、この警告はコード内で HRESULT を誤ってブール型に対してテストすることが原因で発生します。一般的には、SUCCEEDED マクロまたは FAILED マクロを使用して HRESULT の値をテストすることをお勧めします。この警告を解決するには、次のコードを使用します。
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
この警告では、SCODE 型は HRESULT と等価です。