C6220
警告 C6220 - 在語意不相同的整數型別之間發生不當隱含轉型: 將 HRESULT 比作 -1。考慮改用 SUCCEEDED 或 FAILED 巨集
這項警告表示 HRESULT 會與明確且非 HRESULT 的值 -1 進行比較,這並不是語式正確的 (Well-Formed) HRESULT。HRESULT (E_FAIL) 中的失敗不是以 -1 表示。因此,HRESULT 至整數的隱含轉型會產生不正確的值,而且可能導致錯誤的結果。
範例
在大部分的情況下,這項警告是由於程式碼錯誤地預期函式應該會傳回 HRESULT 而非傳回整數所造成的,它是以 -1 為錯誤值。下列程式碼範例會產生這項警告:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
最好是使用 SUCCEEDED 或 FAILED 巨集來測試 HRESULT 的值。若要更正這則警告,請使用下列程式碼:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
在這個警告中,SCODE 型別相當於 HRESULT。
明確比較適合於檢查特定的 HRESULT 值,例如 E_FAIL。否則,請使用 SUCCEEDED 或 FAILED 巨集。
如需詳細資訊,請參閱 SUCCEEDED 巨集 (英文) 和 FAILED 巨集 (英文)。