서적 정리/DirectX11을 이용한 3D 게임 프로그래밍 입문

28.Direct3D 응용 프로그램의 디버깅

민돌이2 2022. 1. 20. 18:01

이 책의 예제는 공부목적이기에 오류 처리에 관련된 코드가 대부분 제거되어 있지만, 응용 프로그램 프레임워크는 다수의 Direct3D 함수들이 반환하는 HRESULT 형식의 반환값을 점검해 주는 매크로를 제공한다. d3dUtil.h에 HR매크로로 정의되어 있다.

#if defined(DEBUG) | defined(_DEBUG)
	#ifndef HR
	#define HR(x)                                              \
	{                                                          \
		HRESULT hr = (x);                                      \
		if(FAILED(hr))                                         \
		{                                                      \
			DXTrace(__FILE__, (DWORD)__LINE__, hr, L#x, true); \
		}                                                      \
	}
	#endif

#else
	#ifndef HR
	#define HR(x) (x)
	#endif
#endif

이 매크로는 함수의 반환 코드가 실패하면 그 반환 코드를 DXTrace 함수에 넘겨준다.

HRESULT WINAPI DXTraceA( __in_z const char* strFile, __in DWORD dwLine, 
	__in HRESULT hr, __in_z_opt const char* strMsg, __in BOOL bPopMsgBox );
    
HRESULT WINAPI DXTraceW( __in_z const char* strFile, __in DWORD dwLine, 
	__in HRESULT hr, __in_z_opt const WCHAR* strMsg, __in BOOL bPopMsgBox );

이 함수는 오류가 발생항 파일과 행번호를 보여주는 메시지 상자를 띄운다.

여기서 알아야 할 것은 디버그 모드가 아니라면 HR매크로는 아무 일도 하지 않는다.

728x90