Sdílet prostřednictvím


Globální funkce ladění a hlášení chyb

Tyto funkce poskytují užitečné možnosti ladění a trasování.

Název Popis
AtlHresultFromLastError GetLastError Vrátí kód chyby ve formě HRESULT.
AtlHresultFromWin32 Převede kód chyby Win32 na HRESULT.
AtlReportError Nastaví pro IErrorInfo klienta podrobnosti o chybě.
AtlThrow Vyhodí .CAtlException
AtlThrowLastWin32 Voláním této funkce signalizují chybu na základě výsledku funkce GetLastErrorSystému Windows .

AtlHresultFromLastError

Vrátí hodnotu posledního kódu chyby volajícího vlákna ve formě HRESULT.

HRESULT AtlHresultFromLastError();

Poznámky

AtlHresultFromLastError volání GetLastError k získání poslední chyby a vrátí chybu po převodu na HRESULT pomocí HRESULT_FROM_WIN32 makra.

Požadavky

Hlavička: atlcomcli.h

AtlHresultFromWin32

Převede kód chyby Win32 na HRESULT.

AtlHresultFromWin32(DWORD error);

Parametry

chyba
Chybová hodnota, kterou chcete převést.

Poznámky

Převede kód chyby Win32 na HRESULT pomocí HRESULT_FROM_WIN32 makra.

Poznámka:

Místo použití HRESULT_FROM_WIN32(GetLastError())použijte funkci AtlHresultFromLastError.

Požadavky

Hlavička: atlcomcli.h

AtlReportError

Nastaví rozhraní tak IErrorInfo , aby klientům objektu poskytovalo informace o chybách.

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());

Parametry

clsid
[v] CLSID objektu, který hlásí chybu.

lpszDesc
[v] Řetězec popisující chybu. Verze Unicode určují, že lpszDesc je typu LPCOLESTR; verze ANSI určuje typ LPCSTR.

iid
[v] IID rozhraní definující chybu nebo GUID_NULL, pokud je chyba definována operačním systémem.

hRes
[v] Hodnota HRESULT, kterou chcete vrátit volajícímu.

Nid
[v] Identifikátor prostředku, kde je uložen řetězec popisu chyby. Tato hodnota by měla být mezi 0x0200 a 0xFFFF(včetně). V buildech ladění bude výsledkem ASSERT, pokud nID neindexuje platný řetězec. V buildech vydaných verzí se řetězec popisu chyby nastaví na Neznámá chyba.

dwHelpID
[v] Identifikátor kontextu nápovědy pro chybu.

lpszHelpFile
[v] Cesta a název souboru nápovědy popisující chybu

hInst
[v] Popisovač prostředku. Ve výchozím nastavení je tento parametr , kde __AtlBaseModuleModule je __AtlBaseModuleModule::GetResourceInstanceglobální instance CAtlBaseModule nebo třídy odvozené z ní.

Návratová hodnota

Pokud je parametr hRes nenulová, vrátí hodnotu hRes. Pokud je hodnota hRes nula, pak první čtyři verze návratových AtlReportError DISP_E_EXCEPTION. Poslední dvě verze vrátí výsledek makra MAKE_HRESULT( 1, FACILITY_ITF; nID ).

Poznámky

Řetězec lpszDesc se používá jako textový popis chyby. Když klient obdrží hodnotu hRes , ze AtlReportErrorkteré se vrátíte, má klient přístup ke IErrorInfo struktuře s podrobnostmi o chybě.

Příklad

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");
}

Upozornění

Nepoužívejte AtlReportError v obslužných rutinách zachycení jazyka C++. Některá přepsání těchto funkcí používají interně makra převodu řetězců ATL, která _alloca funkci používají interně. Použití AtlReportError v obslužné rutině zachycení jazyka C++ může způsobit výjimky v obslužných rutinách zachycení jazyka C++.

Požadavky

Hlavička: atlcom.h

AtlThrow

Voláním této funkce signalizujete chybu na základě stavového kódu HRESULT.

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

Parametry

Hr
Standardní hodnota HRESULT.

Poznámky

Tuto funkci používá kód KNIHOVNY ATL a MFC v případě chybového stavu. Můžete ho také volat z vlastního kódu. Výchozí implementace této funkce závisí na definici symbolu _ATL_NO_EXCEPTIONS a na typu projektu, MFC nebo ATL.

Ve všech případech tato funkce trasuje HRESULT ladicímu programu.

V sadě Visual Studio 2015 Update 3 a novější je tato funkce přiřazena __declspec(noreturn), aby se zabránilo nechutným upozorněním SAL.

Pokud _ATL_NO_EXCEPTIONS není definován v projektu MFC, tato funkce vyvolá výjimku CMemoryException nebo COleException na základě hodnoty HRESULT.

Pokud _ATL_NO_EXCEPTIONS není definován v projektu ATL, funkce vyvolá výjimku CAtlException.

Pokud je definována _ATL_NO_EXCEPTIONS, funkce místo vyvolání výjimky způsobí selhání kontrolního výrazu.

V případě projektů ATL je možné poskytnout vlastní implementaci této funkce, kterou atL použije v případě selhání. Uděláte to tak, že definujete vlastní funkci se stejným podpisem jako AtlThrow a #define AtlThrow jako název funkce. To musí být provedeno před zahrnutím atlexcept.h (což znamená, že musí být provedeno před zahrnutím všech hlaviček ATL, protože atlbase.h obsahuje atlexcept.h). Přiřaďte funkci __declspec(noreturn) , abyste se vyhnuli nechtěným upozorněním SAL.

Příklad

// 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 ..
};

Požadavky

Hlavička: atldef.h

AtlThrowLastWin32

Voláním této funkce signalizují chybu na základě výsledku funkce GetLastErrorSystému Windows .

inline void AtlThrowLastWin32();

Poznámky

Tato funkce sleduje výsledek GetLastError ladicího programu.

Pokud _ATL_NO_EXCEPTIONS není definován v projektu MFC, tato funkce vyvolá CMemoryException nebo COleException na základě hodnoty vrácené GetLastError.

Pokud _ATL_NO_EXCEPTIONS není definován v projektu ATL, funkce vyvolá výjimku CAtlException.

Pokud je definována _ATL_NO_EXCEPTIONS, funkce místo vyvolání výjimky způsobí selhání kontrolního výrazu.

Požadavky

Hlavička: atldef.h

Viz také

Functions
Makra ladění a hlášení chyb