Share via


Foutopsporing en algemene functies voor foutrapportage

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze functies bieden nuttige foutopsporings- en traceringsfaciliteiten.

Naam Description
AtlHresultFromLastError Retourneert een GetLastError foutcode in de vorm van een HRESULT.
AtlHresultFromWin32 Converteert een Win32-foutcode naar een HRESULT.
AtlReportError IErrorInfo Hiermee stelt u foutdetails voor een client in.
AtlThrow Gooit een CAtlException.
AtlThrowLastWin32 Roep deze functie aan om een fout te signaleren op basis van het resultaat van de Windows-functie GetLastError.

AtlHresultFromLastError

Retourneert de laatste foutcodewaarde van de aanroepende thread in de vorm van een HRESULT.

HRESULT AtlHresultFromLastError();

Opmerkingen

AtlHresultFromLastError roept GetLastError aan om de laatste fout op te halen en retourneert de fout nadat deze is geconverteerd naar een HRESULT met behulp van de HRESULT_FROM_WIN32 macro.

Requirements

Koptekst: atlcomcli.h

AtlHresultFromWin32

Converteert een Win32-foutcode naar een HRESULT.

AtlHresultFromWin32(DWORD error);

Parameterwaarden

fout
De foutwaarde die moet worden geconverteerd.

Opmerkingen

Converteert een Win32-foutcode naar een HRESULT met behulp van de macro HRESULT_FROM_WIN32.

Opmerking

Gebruik in plaats van HRESULT_FROM_WIN32(GetLastError())de functie AtlHresultFromLastError.

Requirements

Koptekst: atlcomcli.h

AtlReportError

Hiermee stelt u de IErrorInfo interface in om foutinformatie te verstrekken aan clients van het object.

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

Parameterwaarden

clsid
[in] De CLSID van het object dat de fout rapporteert.

lpszDesc
[in] De tekenreeks die de fout beschrijft. De Unicode-versies geven aan dat lpszDesc van het type LPCOLESTR is; de ANSI-versie specificeert een type LPCSTR.

iid
[in] De IID van de interface die de fout definieert of GUID_NULL als de fout is gedefinieerd door het besturingssysteem.

hRes
[in] Het HRESULT dat u wilt terugsturen naar de beller.

nID
[in] De resource-id waarin de tekenreeks voor foutbeschrijving wordt opgeslagen. Deze waarde moet liggen tussen 0x0200 en 0xFFFF, inclusief. In builds voor foutopsporing resulteert een ASSERT als nID geen geldige tekenreeks indexeert. In release-builds wordt de tekenreeks voor foutbeschrijving ingesteld op 'Onbekende fout'.

dwHelpID
[in] De Help-context-id voor de fout.

lpszHelpFile
[in] Het pad en de naam van het Help-bestand waarin de fout wordt beschreven.

hInst
[in] De ingang voor de resource. Deze parameter is __AtlBaseModuleModule::GetResourceInstancestandaard, waar __AtlBaseModuleModule is het globale exemplaar van CAtlBaseModule of een klasse die ervan is afgeleid.

Retourwaarde

Als de parameter hRes niet-nul is, wordt de waarde van hRes geretourneerd. Als hRes nul is, worden de eerste vier versies van AtlReportError retour DISP_E_EXCEPTION. De laatste twee versies retourneren het resultaat van de macro MAKE_HRESULT( 1, FACILITY_ITF,nID).

Opmerkingen

De tekenreeks lpszDesc wordt gebruikt als de tekstbeschrijving van de fout. Wanneer de client de hRes ontvangt waaruit u terugkeert AtlReportError, heeft de client toegang tot de IErrorInfo structuur voor meer informatie over de fout.

Example

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

Waarschuwing

Niet gebruiken AtlReportError in C++ catch handlers. Sommige onderdrukkingen van deze functies maken intern gebruik van de ATL-tekenreeksconversiemacro's, die op hun beurt de _alloca functie intern gebruiken. Het gebruik AtlReportError in een C++ catch-handler kan uitzonderingen veroorzaken in C++ catch handlers.

Requirements

Koptekst: atlcom.h

AtlThrow

Roep deze functie aan om een fout te signaleren op basis van een HRESULT-statuscode.

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

Parameterwaarden

hr-
StandaardWAARDE HRESULT.

Opmerkingen

Deze functie wordt gebruikt door ATL- en MFC-code in het geval van een foutvoorwaarde. Het kan ook worden aangeroepen vanuit uw eigen code. De standaard implementatie van deze functie is afhankelijk van de definitie van het symbool _ATL_NO_EXCEPTIONS en van het type project, MFC of ATL.

In alle gevallen traceert deze functie het HRESULT naar het foutopsporingsprogramma.

In Visual Studio 2015 Update 3 en hoger wordt deze functie toegeschreven __declspec(noreturn) om valse SAL-waarschuwingen te voorkomen.

Als _ATL_NO_EXCEPTIONS niet is gedefinieerd in een MFC-project, genereert deze functie een CMemoryException of een COleException op basis van de waarde van het HRESULT.

Als _ATL_NO_EXCEPTIONS niet is gedefinieerd in een ATL-project, genereert de functie een CAtlException.

Als _ATL_NO_EXCEPTIONS is gedefinieerd, veroorzaakt de functie een assertiefout in plaats van een uitzondering te genereren.

Voor ATL-projecten is het mogelijk om uw eigen implementatie van deze functie te bieden die door ATL moet worden gebruikt in het geval van een storing. U doet dit door uw eigen functie te definiƫren met dezelfde handtekening als AtlThrow en #define AtlThrow de naam van uw functie te zijn. Dit moet worden gedaan voordat u atlexcept.h opneemt (wat betekent dat het moet worden gedaan voordat u ATL-headers opneemt sinds atlbase.h atlexcept.h bevat). Geef uw functie __declspec(noreturn) een kenmerk om valse SAL-waarschuwingen te voorkomen.

Example

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

Requirements

Koptekst: atldef.h

AtlThrowLastWin32

Roep deze functie aan om een fout te signaleren op basis van het resultaat van de Windows-functie GetLastError.

inline void AtlThrowLastWin32();

Opmerkingen

Deze functie traceert het resultaat van GetLastError het foutopsporingsprogramma.

Als _ATL_NO_EXCEPTIONS niet is gedefinieerd in een MFC-project, genereert deze functie een CMemoryException of een COleException op basis van de waarde die wordt geretourneerd door GetLastError.

Als _ATL_NO_EXCEPTIONS niet is gedefinieerd in een ATL-project, genereert de functie een CAtlException.

Als _ATL_NO_EXCEPTIONS is gedefinieerd, veroorzaakt de functie een assertiefout in plaats van een uitzondering te genereren.

Requirements

Koptekst: atldef.h

Zie ook

Functies
Foutopsporing en macro's voor foutrapportage