繁体   English   中英

你如何将std :: system_error与GetLastError一起使用?

[英]How do you use std::system_error with GetLastError?

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

检查GetLastError()的值如何

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

请参阅此处获取error_code此处查看std::system_error

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

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

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

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

对于一个真正可移植且强大的解决方案,我建议将std::system_errorstd::system_category子类std::system_category windows_errorwindows_category并自己实现正确的功能。 据报道,YMMV,VS2017正如人们所期望的那样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM