ErrorLogger는 빌드 중 에러가 발생했을 때, 어디서 어떤 에러가 발생했는지 MessageBox에 에러 문구를 띄워 알려준다.
문자열로 에러를 띄우기 위해 String Converter를 통해 변환을 시켜준다.
StringConverter.h
#pragma once
#include <string>
using namespace std;
class StringConverter
{
public:
static wstring StringToWide(string str);
};
StringConverter.cpp
#include "StringConverter.h"
/* string을 wstring으로 변환해주는 함수 */
wstring StringConverter::StringToWide(string str)
{
wstring wide_string(str.begin(), str.end());
return wide_string;
}
string
std::string이 정의된 곳
wstring
std::wstring은 std::string의 wchar_t 버전
wchar_t
- unsigned short 형
- 일반 char는 데이터 사이즈가 작아 표현 문자에 한계가 있어서 표현해야 할 문자가 많을 때 wchar_t 사용
- 한국어나 다른 언어들을 표현할 때 사용
[StringConverter.h 파일 생성 및 코드 작성] 과 동일하게 진행
단, ErrorLogger.h로 생성할 것
ErrorLogger.h
#pragma once
#include "StringConverter.h"
#include <Windows.h> // HRESULT 타입을 사용하기 위해 추가
class ErrorLogger
{
public:
static void Log(string message);
static void Log(HRESULT hr, string message);
};
Log : 에러 메시지를 띄워주는 함수
HRESULT : Com Interface에 소속된 대부분의 함수는 HRESULT값을 가지는데, 이는 함수의 성공 여부와 에러 발생 시 어떠한 종류의 에러인지 알 수 있는 변환형
[StringConverter.cpp 파일 생성 및 코드 작성] 과 동일하게 진행
단, ErrorLogger.cpp로 생성할 것
ErrorLogger.cpp
#include "ErrorLogger.h"
#include <comdef.h> // _com_error 타입 사용하기 위해 추가
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);
}
MessageBoxA(핸들, 내용, 제목, 박스 종류);
- A는 멀티바이트용 메시지 박스
- MB_ICONERROR : 오류 모양 박스
MessageBoxW(핸들, 내용, 제목, 박스 종류);
- 유니코드용 메시지 박스이기 때문에 앞에 L을 붙여야 함
main.cpp
#include "ErrorLogger.h" // ErrorLogger.h 추가
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "DirectXTK.lib")
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int cCmdShow)
{
HRESULT hr = E_INVALIDARG; // 올바르지 않은 매개 변수
ErrorLogger::Log(hr, "FAILURE");
return 0;
}