C6226
警告 C6226: 意味の異なる整数型の間の暗黙的なキャストです: -1 を HRESULT に割り当てています。E_FAIL を代わりに使用してください。
この警告は、HRESULT が明示的な値 -1 によって代入または初期化されることを示します。この警告は、多くの場合、整数と HRESULT 型が不適切に使用された場合に発生します。成功を示すには、記号定数 S_OK を使用してください。失敗を示すには、E_constant で始まる記号定数を使用してください。
詳細については、「SUCCEEDED (SUCCEEDED マクロ)」および「FAILED (FAILED マクロ)」を参照してください。
使用例
この警告が発生するコード例を次に示します。
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
この警告を解決するには、次のコードを使用します。
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
この警告では、SCODE 型は HRESULT と等価です。
malloc と free (および関連する動的メモリ割り当て API) の使用には、メモリ リークと例外に関して多くの落とし穴があることに注意してください。これらのリークと例外の問題を完全に回避するには、C++ の標準テンプレート ライブラリ (STL) によって提供される機構を使用します。これには、shared_ptr、unique_ptr、vector などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。