gpt4 book ai didi

c++ - 是否可以使用 GetLastError 检查错误代码是否已被检索

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:43 24 4
gpt4 key购买 nike

如果您有一个大型系统,它会自动显示一个漂亮的窗口来解释捕获的异常,那么能够将错误代码与消息一起显示(以供进一步调查)会很好。但是由于某些函数调用是针对设置错误代码的失败 Windows 函数,而有些是未设置错误代码的本地失败函数,我想知道是否有办法检查是否已“检索到最后设置的错误代码” "已经。

假设我们有一段代码

if (!CopyFile(("c:\foobar.txt", "d:\foobar.txt",FALSE))
{
throw FooBarException("bla bla bla");
}

这里可以自动将错误代码添加到错误消息中,因为 CopyFile 是一个在失败时设置错误代码的函数。现在,我们可以在 if 语句中“手动”添加错误代码,并将其附加到创建异常时传递的错误字符串中。但是为了不必更改现有代码中的数千个地方,我们可以让 FooBarException 的构造函数自动获取并附加错误代码。但这也提出了问题。

如果某些未设置错误代码的代码导致引发 FooBarException 怎么办。然后构造函数将 GetLastError 但得到一个错误代码,该代码可能根本与当前异常无关。

但如果 FooBarException 的构造函数可以调用一些 LastErrorRetrived(或类似的东西)并在错误代码已被检索到时得到 true在它忽略附加错误代码并假定它与较早的错误相关之前。

现在我明白,如果在每个可能失败的 Windows 函数并设置错误代码后实际上没有“检索”错误代码,这可能会变得一团糟。但让我们假设这已经完成。

最佳答案

简短回答:否。

GetLastError 返回的值只是一个没有附加任何逻辑的全局(每线程)对象。可以通过GetLastError访问,SetLastError和神秘的RestoreLastError .

恐怕我必须宣布一个消息:将错误处理 retrofit 到一个没有为此做好准备的系统中是乏味的。

除了实现几个异常类(用于 Win32 错误代码、COM HRESULT 等)和更改每次调用之外,您几乎无能为力。

关于c++ - 是否可以使用 GetLastError 检查错误代码是否已被检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com