디버깅 및 오류 보고 전역 함수
이러한 함수는 유용한 디버깅 및 추적 기능을 제공합니다.
속성 | 설명 |
---|---|
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] 오류를 설명하는 문자열입니다. 유니코드 버전은 lpszDesc가 LPCOLESTR 형식임을 지정하고 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 프로젝트에 정의되지 않은 경우 함수는 CAtlException을 throw합니다.
_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 프로젝트에 정의되지 않은 경우 함수는 CAtlException을 throw합니다.
_ATL_NO_EXCEPTIONS 정의된 경우 함수는 예외를 throw하는 대신 어설션 실패를 발생합니다.
요구 사항
헤더: atldef.h