gpt4 book ai didi

c++ - 在 catch block 中调用的 GetLastError 产生不正确的值

转载 作者:行者123 更新时间:2023-11-28 03:46:33 25 4
gpt4 key购买 nike

今天探索一些遗留代码很有趣。碰到这个小数字:

function Func1()
{
DWORD dwError;
try
{
dwError = 1;
throw "Hey!";
} catch (LPCTSTR szError)
{
Log("Log1: %d", dwError);
SetLastError(dwError);
throw szError;
}
}

function Func2()
{
try {
Func1();
}
catch (LPCTSTR szError)
{
DWORD dwLastError = GetLastError();
Log("Log2: %d", dwLastError); ///OMG is 0!
}
}

GetLastError() 返回 0!这是为什么?这些功能实际上比这复杂一点。它们确实在堆栈上包含了一些东西(DWORD、CString、BYTE[])。我应该寻找什么?

日志看起来像:

日志 1: 1

日志 2:0

最佳答案

MSVC 编译器和运行时中的 C++ 异常构建在 native Windows SEH 之上。堆栈展开实际上是由 Windows 执行的。使用 Windows api 函数将影响为 GetLastError() 存储的值。 this answer 中有关与 SEH 连接的更多详细信息.

关于c++ - 在 catch block 中调用的 GetLastError 产生不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437646/

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