From 41745326d8440340a87b5179139b2915efe3715d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 18 Jul 2022 03:03:56 +0200 Subject: Add Unicode support to Win32Error. --- c/common.cpp | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'c/common.cpp') diff --git a/c/common.cpp b/c/common.cpp index f0b5d34..a5b7316 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -2,30 +2,50 @@ #include "common.h" -Win32Error::Win32Error(const DWORD dwErr) -{ - m_dwErr = dwErr; - FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - m_dwErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (char*)&m_szMsg, - 0, NULL - ); -} +Win32Error::Win32Error(const DWORD dwErr) : m_dwErr(dwErr) {} Win32Error::~Win32Error() { if (m_szMsg) HeapFree(GetProcessHeap(), 0, m_szMsg); + if (m_wszMsg) + HeapFree(GetProcessHeap(), 0, m_wszMsg); } 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), + (char*)&m_szMsg, + 0, NULL + ); return m_szMsg; } +const TCHAR* Win32Error::twhat() const noexcept +{ +#ifdef UNICODE +#define M m_wszMsg +#else +#define M m_szMsg +#endif + if (!M) + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + m_dwErr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (TCHAR*)&M, + 0, NULL + ); + return M; +#undef M +} + Library::Library(const TCHAR* const tszLibrary) { m_hModule = LoadLibrary(tszLibrary); -- cgit v1.2.3