// Throw std::runtime_error with an error message. void ThrowRuntimeError(_In_ const std::basic_string<TCHAR> &Message) { const auto errorCode = ::GetLastError(); const auto errorMessage = GetWin32ErrorMessage(errorCode); char msg[1024]; #if UNICODE static const char FORMAT_STR[] = "%S : %lu(0x%08x) : %S"; #else static const char FORMAT_STR[] = "%s : %lu(0x%08x) : %s"; #endif StringCchPrintfA(msg, _countof(msg), FORMAT_STR, Message.c_str(), errorCode, errorCode, errorMessage.c_str()); throw std::runtime_error(msg); }
Win32Exception::Win32Exception(const char *extraMsg) : std::runtime_error(GetWin32ErrorMessage(extraMsg, GetLastError())) { }
// Display an error message with an error message of the current error code. void PrintErrorMessage(_In_ const std::basic_string<TCHAR> &Message) { const auto errorCode = ::GetLastError(); const auto errorMessage = GetWin32ErrorMessage(errorCode); ::_ftprintf_s(stderr, _T("%s : %lu(0x%08x) : %s\n"), Message.c_str(), errorCode, errorCode, errorMessage.c_str()); }