70 lines
1.2 KiB
C++
70 lines
1.2 KiB
C++
|
|
|
|
#pragma once
|
|
|
|
#if !defined(MIJIN_UTIL_WINERR_HPP_INCLUDED)
|
|
#define MIJIN_UTIL_WINERR_HPP_INCLUDED 1
|
|
|
|
#include <format>
|
|
|
|
#include <windows.h>
|
|
#include "./winundef.hpp"
|
|
|
|
#include "./exception.hpp"
|
|
|
|
namespace mijin
|
|
{
|
|
|
|
//
|
|
// public types
|
|
//
|
|
|
|
class HRException : public Exception
|
|
{
|
|
private:
|
|
HRESULT hResult_;
|
|
public:
|
|
explicit inline HRException(HRESULT hResult);
|
|
inline HRException(std::string_view message, HRESULT hResult);
|
|
};
|
|
|
|
//
|
|
// public functions
|
|
//
|
|
|
|
[[nodiscard]]
|
|
inline std::string getHResultMessage(HRESULT hResult)
|
|
{
|
|
if (hResult == S_OK)
|
|
{
|
|
return "Success (0x0)";
|
|
}
|
|
return std::format("Unknown error (0x{:x}", hResult);
|
|
}
|
|
|
|
inline HRESULT ensureHR(HRESULT hResult, std::string_view message = {})
|
|
{
|
|
if (!SUCCEEDED(hResult))
|
|
{
|
|
if (message.empty())
|
|
{
|
|
throw HRException(hResult);
|
|
}
|
|
throw HRException(message, hResult);
|
|
}
|
|
return hResult;
|
|
}
|
|
|
|
HRException::HRException(HRESULT hResult) : Exception(getHResultMessage(hResult)), hResult_(hResult)
|
|
{
|
|
|
|
}
|
|
|
|
HRException::HRException(std::string_view message, HRESULT hResult)
|
|
: Exception(std::format("{} {}", message, getHResultMessage(hResult))), hResult_(hResult)
|
|
{
|
|
|
|
}
|
|
}
|
|
#endif // !defined(MIJIN_UTIL_WINERR_HPP_INCLUDED)
|