aboutsummaryrefslogtreecommitdiff
path: root/c/common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c/common.cpp')
-rw-r--r--c/common.cpp44
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);