这非常类似于: Turning GetLastError() into an exception
我还希望能够在错误中添加std::string
:
class Win32Exception : public std::system_error
{
public:
Win32Exception(std::string ErrorDesc) : std::system_error(GetLastError(), std::system_category(), ErrorDesc)
{
}
};
问题在于,至少在VS2015的DEBUG版本中,std::string
的构造会重置GetLastError()
。因此,当Win32Exception调用GetLastError()
时,它总是变为零/无错误。
我可以使用const char*
,但我也想使用std::wstring
,这意味着我需要将其转换为std::string
或const char*
(因为std::system_error
}期待std::string
或const char*
),这会让我回到错误重置的同样问题。
是否有一些关于如何轻松抛出Win32错误的优雅解决方案,使异常类捕获GetLastError()
并能够使用std::string
添加任意信息?
答案 0 :(得分:3)
您需要重写异常类构造函数,因此它将错误代码作为参数,因此错误代码:
Win32Exception
(
char const * const psz_description
, ::DWORD const error_code = ::GetLastError()
)
: std::system_error(error_code, std::system_category(), psz_description)
{
}