Aracılığıyla paylaş


Hata Ayıklama ve Hata Raporlama Genel İşlevleri

Bu işlevler yararlı hata ayıklama ve izleme olanakları sağlar.

Veri Akışı Adı Açıklama
AtlHresultFromLastError GetLastError HRESULT biçiminde bir hata kodu döndürür.
AtlHresultFromWin32 Win32 hata kodunu HRESULT biçimine dönüştürür.
AtlReportError İstemciye hata ayrıntılarını sağlamak için ayarlar IErrorInfo .
AtlThrow Bir CAtlExceptionatar.
AtlThrowLastWin32 Windows işlevinin sonucuna göre hata sinyali vermek için bu işlevi GetLastErrorçağırın.

AtlHresultFromLastError

Çağıran iş parçacığının son hata kodu değerini HRESULT biçiminde döndürür.

HRESULT AtlHresultFromLastError();

Açıklamalar

AtlHresultFromLastError çağrısı GetLastError yaparak son hatayı alır ve HRESULT_FROM_WIN32 makroyu kullanarak bir HRESULT'a dönüştürdükten sonra hatayı döndürür.

Gereksinimler

Üst bilgi: atlcomcli.h

AtlHresultFromWin32

Win32 hata kodunu HRESULT biçimine dönüştürür.

AtlHresultFromWin32(DWORD error);

Parametreler

hata
Dönüştürülecek hata değeri.

Açıklamalar

Makro HRESULT_FROM_WIN32 kullanarak Win32 hata kodunu HRESULT'a dönüştürür.

Not

kullanmak HRESULT_FROM_WIN32(GetLastError())yerine AtlHresultFromLastError işlevini kullanın.

Gereksinimler

Üst bilgi: atlcomcli.h

AtlReportError

Nesnesinin IErrorInfo istemcilerine hata bilgileri sağlamak için arabirimini ayarlar.

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCOLESTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCOLESTR lpszDesc,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCSTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCSTR lpszDesc,
    DWORD dwHelpID,
    LPCSTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    UINT nID,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    UINT nID,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

Parametreler

clsid
[in] Hatayı bildiren nesnenin CLSID değeri.

lpszDesc
[in] Hatayı açıklayan dize. Unicode sürümleri lpszDesc'in LPCOLESTR türünde olduğunu belirtir; ANSI sürümü bir LPCSTR türü belirtir.

iid
[in] Hatayı tanımlayan arabirimin IID değeri veya hatanın işletim sistemi tarafından tanımlandığında GUID_NULL.

hRes
[in] Arayana geri döndürmek istediğiniz HRESULT.

Nıd
[in] Hata açıklaması dizesinin depolandığı kaynak tanımlayıcısı. Bu değer, dahil olmak üzere 0x0200 ile 0xFFFF arasında yer almalıdır. Hata ayıklama derlemelerinde, nID geçerli bir dizenin dizinini oluşturmazsa BIR ASSERT sonucu verir. Sürüm derlemelerinde hata açıklaması dizesi "Bilinmeyen Hata" olarak ayarlanır.

dwHelpID
[in] Hatanın yardım bağlamı tanımlayıcısı.

lpszHelpFile
[in] Hatayı açıklayan yardım dosyasının yolu ve adı.

hInst
[in] Kaynağın tanıtıcısı. Varsayılan olarak, bu parametre CAtlBaseModule'un __AtlBaseModuleModule::GetResourceInstance genel örneği veya ondan türetilen bir sınıf olan __AtlBaseModuleModule parametresidir.

Dönüş Değeri

hRes parametresi sıfır değilse, hRes değerini döndürür. hRes sıfırsa, dönüşünün ilk dört sürümü AtlReportError DISP_E_EXCEPTION. Son iki sürüm, makro MAKE_HRESULT( 1, FACILITY_ITF, nID ) sonucunu döndürür.

Açıklamalar

LpszDesc dizesi, hatanın metin açıklaması olarak kullanılır. İstemci, 'den AtlReportErrordöndürdeğiniz hRes'i aldığında, hatayla ilgili ayrıntılar için yapıya erişebilirIErrorInfo.

Örnek

STDMETHODIMP CMyControl::MyErrorProneMethod()
{
   BOOL bSucceeded = ErrorProneFunc();
   if (bSucceeded)
      return S_OK;
   else
      // hRes is set to DISP_E_EXCEPTION
      return AtlReportError(GetObjectCLSID(), L"My error message");
}

Dikkat

C++ catch işleyicilerinde kullanmayın AtlReportError . Bu işlevlerin bazı geçersiz kılmaları, ATL dize dönüştürme makrolarını dahili olarak kullanır ve bu da işlevi dahili olarak kullanır _alloca . C++ catch işleyicisinde kullanmak AtlReportError , C++ catch işleyicilerinde özel durumlara neden olabilir.

Gereksinimler

Üst bilgi: atlcom.h

AtlThrow

HRESULT durum kodunu temel alan bir hata sinyali vermek için bu işlevi çağır.

__declspec(noreturn) inline void AtlThrow(HRESULT hr);

Parametreler

Hr
Standart HRESULT değeri.

Açıklamalar

Bu işlev, hata koşulu durumunda ATL ve MFC kodu tarafından kullanılır. Kendi kodunuzdan da çağrılabilir. Bu işlevin varsayılan uygulaması, sembol _ATL_NO_EXCEPTIONS tanımına ve proje, MFC veya ATL türüne bağlıdır.

Her durumda, bu işlev HRESULT hata ayıklayıcısını izler.

Visual Studio 2015 Güncelleştirme 3 ve sonraki sürümlerinde, bu işleve sahte SAL uyarılarından kaçınmak için __declspec (noreturn) atfedilir.

_ATL_NO_EXCEPTIONS bir MFC projesinde tanımlanmamışsa, bu işlev HRESULT değerini temel alan bir CMemoryException veya COleException oluşturur.

_ATL_NO_EXCEPTIONS bir ATL projesinde tanımlanmamışsa, işlev bir CAtlException oluşturur.

_ATL_NO_EXCEPTIONS tanımlanırsa, işlev özel durum oluşturma yerine onay hatasına neden olur.

ATL projeleri için, bir hata durumunda ATL tarafından kullanılacak bu işlevi kendi uygulamanızı sağlamak mümkündür. Bunu yapmak için kendi işlevinizi ile aynı imzayla AtlThrow tanımlayın ve işlevinizin adı olarak #define AtlThrow . Bu, atlexcept.h dahil edilmeden önce yapılmalıdır (bu, atlbase.h atlexcept.h içerdiğinden, atL üst bilgileri dahil edilmeden önce yapılması gerektiği anlamına gelir). Sahte SAL uyarılarından kaçınmak için işlevinizi __declspec(noreturn) ilişkilendirin.

Örnek

// Constructors and operators cannot return error codes, and
// so they are the place where exceptions are generally used.
class CMyClass
{
private:
   CComPtr<IBuddy> m_spBuddy;
public:
   CMyClass()
   {
      HRESULT hr = m_spBuddy.CoCreateInstance(CLSID_Buddy);
      if (FAILED(hr))
         AtlThrow(hr);
   }
   //   methods ..
};

Gereksinimler

Üst bilgi: atldef.h

AtlThrowLastWin32

Windows işlevinin sonucuna göre hata sinyali vermek için bu işlevi GetLastErrorçağırın.

inline void AtlThrowLastWin32();

Açıklamalar

Bu işlev, hata ayıklayıcının sonucunu GetLastError izler.

_ATL_NO_EXCEPTIONS bir MFC projesinde tanımlanmamışsa, bu işlev tarafından GetLastErrordöndürülen değere göre bir CMemoryException veya COleException oluşturur.

_ATL_NO_EXCEPTIONS bir ATL projesinde tanımlanmamışsa, işlev bir CAtlException oluşturur.

_ATL_NO_EXCEPTIONS tanımlanırsa, işlev özel durum oluşturma yerine onay hatasına neden olur.

Gereksinimler

Üst bilgi: atldef.h

Ayrıca bkz.

İşlevler
Hata Ayıklama ve Hata Raporlama Makroları