C6221

تحذير C6221: فريق العمل الضمني بين مختلف دلالياً عدد صحيح أنواع: مقارنة HRESULT إلى عدد صحيح. استخدام وحدات الماكرو التي نجحت أو فشلت بدلاً منه

Th هو التحذير يشير إلى أن 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.

ل المزيد من المعلومات، انظر نجاح الماكرو و فشل الماكرو .