Aracılığıyla paylaş


C6220

C6220 - anlam farklı tamsayı türleri arasındaki örtülü dönüþtürme Uyarı: hresult -1 ile karşılaştırma.BAŞARILI veya başarısız makro yerine kullanmayı düşünün

Bu uyarıyı belirten bir HRESULT açık bir ile olmayan karşılaştırıldığını-HRESULT bir alamayacağı -1 değeri HRESULT.Bir hata HRESULT (E_FAIL) -1 tarafından temsil edilmez.Bu nedenle, örtülü bir oyuncu, bir HRESULT yanlış bir değer bir tamsayı oluşturur ve büyük bir olasılıkla yanlış bir sonuca yol.

Örnek

Çoğu durumda, bu uyarı, yanlışlıkla bekleniyor koduna göre döndürmelidir işlevi neden olduğu bir HRESULT bunun yerine bir hata değeri olarak –1 kullanarak bir tamsayı döndürür.Aşağıdaki kod örneği, bu uyarı oluşturur:

#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;
  }
}

En iyisi SUCCEEDED veya FAILED değerini test etmek için makro bir HRESULT.Bu uyarı düzeltmek için şu kodu kullanın:

#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;
  }
}

Bu uyarı için SCODE türü için eşdeğer HRESULT.

Açık karşılaştırma için özel denetlemek uygun HRESULT gibi değerleri E_FAIL.Aksi durumda, SUCCEEDED veya FAILED makrolar.

Daha fazla bilgi için bkz: Başarılı makro ve başarısız makro.