将GetLastError()转换为错误字符串

时间:2017-07-22 15:34:43

标签: c++ string c++11 winapi exception

这非常类似于: 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::stringconst char*(因为std::system_error }期待std::stringconst char*),这会让我回到错误重置的同样问题。

是否有一些关于如何轻松抛出Win32错误的优雅解决方案,使异常类捕获GetLastError()并能够使用std::string添加任意信息?

1 个答案:

答案 0 :(得分:3)

您需要重写异常类构造函数,因此它将错误代码作为参数,因此错误代码:

Win32Exception
(
    char const * const psz_description
,   ::DWORD const      error_code = ::GetLastError()
)
:   std::system_error(error_code, std::system_category(), psz_description)
{
}