diff options
author | John Ankarström <john@ankarstrom.se> | 2022-07-18 03:03:56 +0200 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2022-07-18 03:03:56 +0200 |
commit | 41745326d8440340a87b5179139b2915efe3715d (patch) | |
tree | 7ae465793cc80793efc5392b2628aebaf18819bd /c/common.cpp | |
parent | 0531bf802017b7792b90270b6346b3c88ffcea70 (diff) | |
download | EpisodeBrowser-41745326d8440340a87b5179139b2915efe3715d.tar.gz |
Add Unicode support to Win32Error.
Diffstat (limited to 'c/common.cpp')
-rw-r--r-- | c/common.cpp | 44 |
1 files changed, 32 insertions, 12 deletions
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); |