다음을 통해 공유


디버깅 및 오류 보고 전역 함수

이러한 함수는 유용한 디버깅 및 추적 기능을 제공합니다.

속성 설명
AtlHresultFromLastError GetLastError HRESULT 형식의 오류 코드를 반환합니다.
AtlHresultFromWin32 Win32 오류 코드 HRESULT로 변환합니다.
AtlReportError 클라이언트에 오류 세부 정보를 제공하도록 설정합니다 IErrorInfo .
AtlThrow CAtlException를 throw합니다.
AtlThrowLastWin32 Windows 함수 GetLastError의 결과에 따라 오류를 표시하려면 이 함수를 호출합니다.

AtlHresultFromLastError

호출 스레드의 마지막 오류 코드 값을 HRESULT 형식으로 반환합니다.

HRESULT AtlHresultFromLastError();

설명

AtlHresultFromLastError 호출 GetLastError 하여 마지막 오류를 가져오고 HRESULT_FROM_WIN32 매크로를 사용하여 HRESULT로 변환한 후 오류를 반환합니다.

요구 사항

헤더: atlcomcli.h

AtlHresultFromWin32

Win32 오류 코드 HRESULT로 변환합니다.

AtlHresultFromWin32(DWORD error);

매개 변수

error
변환할 오류 값입니다.

설명

매크로 HRESULT_FROM_WIN32 사용하여 Win32 오류 코드를 HRESULT로 변환합니다.

참고 항목

사용하는 HRESULT_FROM_WIN32(GetLastError())대신 AtlHresultFromLastError 함수를 사용합니다.

요구 사항

헤더: atlcomcli.h

AtlReportError

개체의 IErrorInfo 클라이언트에 오류 정보를 제공하도록 인터페이스를 설정합니다.

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

매개 변수

clsid
[in] 오류를 보고하는 개체의 CLSID입니다.

lpszDesc
[in] 오류를 설명하는 문자열입니다. 유니코드 버전은 lpszDescLPCOLESTR 형식임을 지정하고 ANSI 버전은 LPCSTR 형식을 지정합니다.

iid
[in] 오류를 정의하는 인터페이스의 IID이거나 운영 체제에서 오류를 정의한 경우 GUID_NULL.

hRes
[in] 호출자에게 반환하려는 HRESULT입니다.

nID
[in] 오류 설명 문자열이 저장되는 리소스 식별자입니다. 이 값은 0x0200 0xFFFF 사이에 있어야 합니다. 디버그 빌드에서 nID가 유효한 문자열을 인덱싱하지 않으면 ASSERT가 발생합니다. 릴리스 빌드에서 오류 설명 문자열은 "알 수 없는 오류"로 설정됩니다.

dwHelpID
[in] 오류에 대한 도움말 컨텍스트 식별자입니다.

lpszHelpFile
[in] 오류를 설명하는 도움말 파일의 경로와 이름입니다.

hInst
[in] 리소스에 대한 핸들입니다. 기본적으로 이 매개 변수는 __AtlBaseModuleModule::GetResourceInstance__AtlBaseModuleModule CAtlBaseModule의 전역 인스턴스 또는 CAtlBaseModule에서 파생된 클래스입니다.

Return Value

hRes 매개 변수가 0이 아니면 hRes 값을 반환합니다. hRes가 0이면 처음 네 버전의 AtlReportError 반환이 DISP_E_EXCEPTION. 마지막 두 버전은 매크로 MAKE_HRESULT(1, FACILITY_ITF, nID )의 결과를 반환합니다.

설명

lpszDesc 문자열은 오류에 대한 텍스트 설명으로 사용됩니다. 클라이언트가 반환AtlReportError하는 hRes받으면 클라이언트는 오류에 IErrorInfo 대한 세부 정보를 위해 구조에 액세스할 수 있습니다.

예시

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

주의

C++ catch 처리기에서는 사용하지 AtlReportError 마세요. 이러한 함수의 일부 재정의는 내부적으로 ATL 문자열 변환 매크로를 사용하며, 이 매크로는 내부적으로 이 함수를 _alloca 사용합니다. C++ catch 처리기에서 사용하면 AtlReportError C++ catch 처리기에서 예외가 발생할 수 있습니다.

요구 사항

헤더: atlcom.h

AtlThrow

HRESULT 상태 코드를 기반으로 오류를 알리려면 이 함수를 호출합니다.

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

매개 변수

hr
표준 HRESULT 값입니다.

설명

이 함수는 오류 조건이 발생할 경우 ATL 및 MFC 코드에서 사용됩니다. 사용자 고유의 코드에서 호출할 수도 있습니다. 이 함수의 기본 구현은 기호 _ATL_NO_EXCEPTIONS 정의와 프로젝트 형식, MFC 또는 ATL에 따라 달라집니다.

모든 경우에 이 함수는 HRESULT를 디버거로 추적합니다.

Visual Studio 2015 업데이트 3 이상에서 이 함수는 가짜 SAL 경고를 방지하기 위해 __declspec(noreturn)에 기인합니다.

MFC 프로젝트에서 _ATL_NO_EXCEPTIONS 정의되지 않은 경우 이 함수는 HRESULT 값에 따라 CMemoryException 또는 COleException을 throw합니다.

_ATL_NO_EXCEPTIONS ATL 프로젝트에 정의되지 않은 경우 함수는 CAtlExceptionthrow합니다.

_ATL_NO_EXCEPTIONS 정의된 경우 함수는 예외를 throw하는 대신 어설션 실패를 발생합니다.

ATL 프로젝트의 경우 오류가 발생할 경우 ATL에서 사용할 이 함수의 고유한 구현을 제공할 수 있습니다. 이렇게 하려면 동일한 서명 AtlThrow 으로 고유한 함수를 정의하고 함수의 이름으로 #define AtlThrow . atlexcept.h를 포함하기 전에 이 작업을 수행해야 합니다.즉, atlbase.h에 atlexcept.h가 포함되어 있으므로 ATL 헤더를 포함하기 전에 수행해야 합니다. 가짜 SAL 경고를 방지하기 위해 함수 __declspec(noreturn) 의 특성을 지정합니다.

예시

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

요구 사항

헤더: atldef.h

AtlThrowLastWin32

Windows 함수 GetLastError의 결과에 따라 오류를 표시하려면 이 함수를 호출합니다.

inline void AtlThrowLastWin32();

설명

이 함수는 디버거의 GetLastError 결과를 추적합니다.

MFC 프로젝트에서 _ATL_NO_EXCEPTIONS 정의되지 않은 경우 이 함수는 반환된 GetLastError값에 따라 CMemoryException 또는 COleException을 throw합니다.

_ATL_NO_EXCEPTIONS ATL 프로젝트에 정의되지 않은 경우 함수는 CAtlExceptionthrow합니다.

_ATL_NO_EXCEPTIONS 정의된 경우 함수는 예외를 throw하는 대신 어설션 실패를 발생합니다.

요구 사항

헤더: atldef.h

참고 항목

함수
디버깅 및 오류 보고 매크로