46 auto NumCharsWritten = FormatMessageA(
47 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
50 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
55 if (NumCharsWritten == 0)
57 strcpy_s(m_Msg,
_countof(m_Msg),
"Unknown error");
61 auto nLen = strlen(m_Msg);
62 if (nLen > 1 && m_Msg[nLen - 1] ==
'\n')
65 if (m_Msg[nLen - 2] ==
'\r')
73 const char*
Get() {
return m_Msg; }
82 #define CHECK_D3D_RESULT_THROW(Expr, Message) \
85 HRESULT _hr_ = Expr; \
88 ComErrorDesc ErrDesc(_hr_); \
89 LOG_ERROR_AND_THROW(Message, "\nHRESULT Desc: ", ErrDesc.Get()); \
93 #define CHECK_D3D_RESULT_THROW_EX(Expr, ...) \
96 HRESULT _hr_ = Expr; \
99 auto msg = Diligent::FormatString(__VA_ARGS__); \
100 ComErrorDesc ErrDesc(_hr_); \
101 LOG_ERROR_AND_THROW(msg, "\nHRESULT Desc: ", ErrDesc.Get()); \
105 #define LOG_D3D_ERROR(Expr, Message) \
108 HRESULT _hr_ = Expr; \
111 ComErrorDesc ErrDesc(_hr_); \
112 LOG_ERROR_MESSAGE(Message, "\nHRESULT Desc: ", ErrDesc.Get()); \