aboutsummaryrefslogtreecommitdiff
path: root/src/win/exception.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-10 19:42:46 +0800
committercrupest <crupest@outlook.com>2019-04-10 19:42:46 +0800
commit7351020a582d70a1495249fba87d342c8a1fb634 (patch)
treee80f225041dc3816b3dce21c7e15aadbb211602e /src/win/exception.cpp
parenta94a806f69586e08a30fff0cdb3e52b0ce7acfa5 (diff)
downloadcru-7351020a582d70a1495249fba87d342c8a1fb634.tar.gz
cru-7351020a582d70a1495249fba87d342c8a1fb634.tar.bz2
cru-7351020a582d70a1495249fba87d342c8a1fb634.zip
Refactor.
Diffstat (limited to 'src/win/exception.cpp')
-rw-r--r--src/win/exception.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/win/exception.cpp b/src/win/exception.cpp
new file mode 100644
index 00000000..62305329
--- /dev/null
+++ b/src/win/exception.cpp
@@ -0,0 +1,50 @@
+#include "cru/win/exception.hpp"
+
+#include "cru/common/format.hpp"
+
+namespace cru::win {
+using util::Format;
+
+inline std::string HResultMakeMessage(HRESULT h_result,
+ const std::string_view* message) {
+ char buffer[10];
+ sprintf_s(buffer, "%#08x", h_result);
+
+ if (message)
+ return Format(
+ "An HResultError is thrown. HRESULT: {}.\nAdditional message: {}\n",
+ buffer, *message);
+ else
+ return Format("An HResultError is thrown. HRESULT: {}.\n", buffer);
+}
+
+HResultError::HResultError(HRESULT h_result)
+ : PlatformException(HResultMakeMessage(h_result, nullptr)),
+ h_result_(h_result) {}
+
+HResultError::HResultError(HRESULT h_result,
+ const std::string_view& additional_message)
+ : PlatformException(HResultMakeMessage(h_result, &additional_message)),
+ h_result_(h_result) {}
+
+inline std::string Win32MakeMessage(DWORD error_code,
+ const std::string_view* message) {
+ char buffer[10];
+ sprintf_s(buffer, "%#04x", error_code);
+
+ if (message)
+ return Format("Last error code: {}.\nAdditional message: {}\n", buffer,
+ *message);
+ else
+ return Format("Last error code: {}.\n", buffer);
+}
+
+Win32Error::Win32Error(DWORD error_code)
+ : PlatformException(Win32MakeMessage(error_code, nullptr)),
+ error_code_(error_code) {}
+
+Win32Error::Win32Error(DWORD error_code,
+ const std::string_view& additional_message)
+ : PlatformException(Win32MakeMessage(error_code, &additional_message)),
+ error_code_(error_code) {}
+} // namespace cru::win