共用方式為


C6221

警告 C6221: 語意不相同的整數型別之間發生隱含轉型: 將 HRESULT 比作整數。 請考慮改用 SUCCEEDED 或 FAILED 巨集

這個警告表示 HRESULT 是與零以外的整數進行比較。 HRESULT (S_OK) 中的成功是以 0 表示。 因此,HRESULT 至整數的隱含轉型會產生不正確的值,而且可能導致錯誤的結果。 發生的原因通常是錯誤地預期函式會傳回整數,但實際上卻傳回 HRESULT。

範例

下列程式碼會因為比較 HRESULT 與整數值,而產生這個警告:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

為了更正這個警告,下列程式碼會使用 FAILED 巨集:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

在這個警告中,SCODE 型別相當於 HRESULT。

如需詳細資訊,請參閱 SUCCEEDED 巨集 (英文) 和 FAILED 巨集 (英文)。