共用方式為


C6219

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

這項警告表示 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。