일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 다이렉트X
- GPU
- engine
- Direct Init
- DirectXTK
- c
- C언어
- 게임수학
- 세팅
- Direct3D Init
- RenderTargetView
- 전처리문
- CommandList
- 다중표본화
- CPU
- 다이렉트X 튜토리얼
- DESC
- UE4
- C++
- DirectX12
- Input Assembler
- vertex
- 코딩
- swapchain
- DirectX
- 동기화
- Direct3D
- 프로그래밍
- 다이렉트 초기화
- View
- Today
- Total
비타Cpp
DirectX 2 : 에러 로깅과 문자열 변환기 (Error Logger & String Convertion ) 본문
DirectX 2 : 에러 로깅과 문자열 변환기 (Error Logger & String Convertion )
멍C 2021. 7. 4. 12:32본 글은 유튜브의 Jpres님의 영상을 보고 개인적으로 공부하면서 남기는 글입니다.
플레이리스트 링크 : www.youtube.com/playlist?list=PLcacUGyBsOIBlGyQQWzp6D1Xn6ZENx9Y2
영문 영상을 되지도 않는 영어실력과 구글 번역을 돌려가면 열심히 이해하며 쓰는 글이니, 틀린 부분이 많을 수 있습니다.
꼭 발견하면 꾸짖어주세요 ㅎㅎ; 질문도 해주시면 아는 범위 내에서 열심히 답변해드립니다.
이제 DirectX Engine을 만들면서 필요한 디버깅용 ErrorLogger와 문자열을 변환시켜줄 String Converter를 만든다.
ErrorLogger는 빌드 중 치명적인 에러가 발생했을 때 어디서 어떤 에러가 발생했는지 알게 하여 디버깅에 용이하게 만들게 하기 위함이다.그러기 위해서는 문자열을 이용하여 MessageBox에 에러 문구를 띄워야 하는데, StringConverter를 이용하여 문자 변환을 해 줄 것이다.
그럼 먼저 클래스 부터 만든다. ErrorLogger와 StringConverter를 만든 후, stdafx.h부터 수정한다.
stdafx.h
#pragma once
//Includes
#include <Windows.h>
#include <string>
#include <comdef.h>
//DirectX11 Libraries
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "DirectXTK.lib")
//namespace
using namespace std;
//Custom Headers
#include "StringConverter.h"
#include "ErrorLogger.h"
이때 Custom Headers의 위치가 매우 중요하다.
Custom Headers에서 사용하는 std, <string>, <comdef.h> 때문에, 이보다 먼저 선언되면 에러를 뿜어낼것이다.
std의 문자열은 std::string과 std::wstring이 있는데, 대충 서로 다른 문자형 변수(char, wchar_t) 형을 사용하는 문자열이라고 보면 될 것 같다.
그래서 이를 서로 변환해주는 기능이 필요하여 StringConverter클래스를 만들어준다.
StringConverter.h
#pragma once
class StringConverter
{
public:
static wstring StringToWide(string str);
};
StringConverter.cpp
#include "stdafx.h"
#include "StringConverter.h"
wstring StringConverter::StringToWide(string str)
{
wstring wide_string(str.begin(), str.end());
return wide_string;
}
이제 string을 wstring으로 바꿔주는 변환기를 만들었으니, ErrorLogger를 만들 차례이다.
ErrorLogger.h
#pragma once
class ErrorLogger
{
public:
static void Log(string message);
static void Log(HRESULT hr, string message);
};
ErrorLogger.cpp
#include "stdafx.h"
#include "ErrorLogger.h"
void ErrorLogger::Log(string message)
{
string error_message = "Error: " + message;
MessageBoxA(NULL, error_message.c_str(), "Error", MB_ICONERROR);
}
void ErrorLogger::Log(HRESULT hr, string message)
{
_com_error error(hr);
wstring error_message = L"Error: " + StringConverter::StringToWide(message) + L"\n" + error.ErrorMessage();
MessageBoxW(NULL, error_message.c_str(), L"Error", MB_ICONERROR);
}
HRESULT는 Com Interface에 소속된 대부분의 함수는 HRESULT값을 가지는데, 이는 함수의 성공 여부와 에러 발생 시 어떠한 종류의 에러 인지도 알 수 있는 변환형이다.
이러면 이제 ErrorLoger와 StringConverter는 완성이다.
이제 Main에서 테스트를 해보자.
#include "stdafx.h"
#include "ErrorLogger.h"
int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
ErrorLogger::Log(E_INVALIDARG, "TEST");
return 0;
}
실행을 해보면 이미지처럼 에러 박스가 나온다.
여기서 알 수 있는 건 E_INVALIDARG가 매개 변수가 틀리다는 에러라는 걸 알 수 있다.
E_INVALIDARG를 F12키를 이용해 타고 들어가 보면 winerror.h에 속한다는 걸 알 수 있다.
https://github.com/charles6919/Tutorial
'DirectX11 > DirectX 엔진 튜토리얼' 카테고리의 다른 글
DirectX 1 : 기본세팅(3) (0) | 2021.06.15 |
---|---|
DirectX 2 : 기본세팅(2) (0) | 2021.03.01 |
DirectX 1 : 기본세팅(1) (0) | 2020.09.10 |