From 3d56ea09228ac2989eb8b89c8b69909603d61c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Wed, 20 Jul 2022 02:24:40 +0200 Subject: Use template instead of Win32Error::twhat. --- c/common.cpp | 24 ++++++++++-------------- c/common.h | 6 +++--- c/main.cpp | 2 +- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/c/common.cpp b/c/common.cpp index 7981801..ba52f2c 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -14,36 +14,32 @@ Win32Error::~Win32Error() HeapFree(GetProcessHeap(), 0, m_wszMsg); } -const char* Win32Error::what() const noexcept +template <> +const char* Win32Error::what() const noexcept { if (!m_szMsg) FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, m_dwErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (char*)&m_szMsg, 0, NULL); return m_szMsg; } -const TCHAR* Win32Error::twhat() const noexcept +template <> +const wchar_t* Win32Error::what() const noexcept { -#ifdef UNICODE -#define M m_wszMsg -#else -#define M m_szMsg -#endif - if (!M) - FormatMessage( + if (!m_wszMsg) + FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, m_dwErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (TCHAR*)&M, + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + (wchar_t*)&m_wszMsg, 0, NULL); - return M; -#undef M + return m_wszMsg; } /* Library: Wrapper for loading and freeing dynamically linked libraries. */ diff --git a/c/common.h b/c/common.h index 6b29ed5..d84590d 100644 --- a/c/common.h +++ b/c/common.h @@ -17,8 +17,8 @@ struct Win32Error : public std::exception { Win32Error(DWORD dwErr); ~Win32Error(); - virtual const char* what() const noexcept override; - virtual const TCHAR* twhat() const noexcept; + template const T* what() const noexcept; + private: DWORD m_dwErr; char* m_szMsg = NULL; @@ -69,7 +69,7 @@ inline auto prefer(T... xs) try { return require(xs...); } catch (Win32Error& e) { - EBMessageBox(e.twhat(), TEXT("System Error"), MB_ICONWARNING); + EBMessageBox(e.what(), TEXT("System Error"), MB_ICONWARNING); return (decltype(F(std::declval()...)))NULL; } } diff --git a/c/main.cpp b/c/main.cpp index a72de53..541f524 100644 --- a/c/main.cpp +++ b/c/main.cpp @@ -60,7 +60,7 @@ void OnTerminate() noexcept "Fatal Error", MB_ICONERROR); } catch (Win32Error& e) { std::basic_string tstr = TEXT("The program was terminated due to a Windows error: "); - tstr += e.twhat(); + tstr += e.what(); MessageBox(NULL, tstr.c_str(), TEXT("Fatal Error"), MB_ICONERROR); } catch (std::exception& e) { std::string str = "The program was terminated due to an exception: "; -- cgit v1.2.3