16

如果我调用通过 GetLastError 报告错误的 Win32 函数,例如RegisterClassEx,我如何为该错误抛出 std::system_error ?

4

2 回答 2

19

检查GetLastError()like的值

DWORD dwErrVal = GetLastError();
std::error_code ec (dwErrVal, std::system_category());
throw std::system_error(ec, "Exception occurred");

请参见此处error_code此处。_std::system_error

于 2013-04-06T19:19:51.580 回答
9

请注意,比较 astd::error_code类别中的astd::system_category()通常不适用于std::errc枚举常量,具体取决于您的供应商。例如

std::error_code(ERROR_FILE_NOT_FOUND, std::system_category()) != std::errc::no_such_file_or_directory)

某些供应商需要使用std::generic_category()它才能工作。

在 MinGWstd::error_code(ERROR_FILE_NOT_FOUND, std::system_category()).message()中不会给你正确的信息。

对于一个真正可移植且健壮的解决方案,我建议您自己继承std::system_errorstd::system_category实现正确的功能windows_errorwindows_category据报道,YMMV、VS2017 可以正常工作。

于 2013-09-06T21:28:15.247 回答