将 GetLastError() 转换为带有错误字符串的异常

问题描述 投票:0回答:1

这非常类似于: 将 GetLastError() 变成异常

我还希望能够在错误中添加

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
添加任意信息?

c++ string c++11 winapi exception
1个回答
3
投票

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

Win32Exception
(
    char const * const psz_description
,   ::DWORD const      error_code = ::GetLastError()
)
:   std::system_error(error_code, std::system_category(), psz_description)
{
}
© www.soinside.com 2019 - 2024. All rights reserved.