哪个 WinAPI 函数将最后一个错误设置为ERROR_SUCCESS(如果未发生错误)
Which WinAPI function set last error to ERROR_SUCCESS if no error occured?
有一个庞大的遗留代码库,它似乎在某些难以重现和调查的情况下失败了。
它调用一些WinAPI函数,例如CopyFile,而不是检查返回代码,而是检查GetLastError()
值。我知道这是错误的,但是很高兴知道非null最后一个错误值是否源自此调用或之前发生的事情。如果我确定CopyFile
将最后一个错误设置为 ERROR_SUCCESS
以防一切顺利,那么就足以得出结论,此特定调用失败。
MSDN提到有些函数这样做,有些不这样做,但没有具体说明哪些函数这样做。是否有一些非官方列表/参考资料涵盖此问题?
GetLastError()
用法是按函数记录的。 没有单一的主列表记录哪些功能在GetLastError()
方面以何种方式起作用。 如果任何给定函数未记录为设置最后一个错误,请不要在函数退出后使用 GetLastError()
检查最后一个错误。
大多数设置最后一个错误的函数不会在成功时设置它,只会在失败时设置它,并且记录在案。
在成功时设置最后一个错误的函数将记录为这样,并且还将记录哪些成功条件将最后一个错误设置为哪个值。 这通常用于函数的返回值对于函数是成功还是失败不明确的情况,因此GetLastError()
用于区分。 例如,大多数函数在失败时返回 0,但某些函数可能在成功和失败时返回 0。在这种情况下,如果GetLastError()
则返回 0(或定义的成功代码),则函数成功,否则函数失败。 GetTLSValue()
就是一个例子。
一个值得注意的例外是创建命名内核对象的函数(CreateMutex()
、CreateEvent()
、CreateSemaphore()
等)。 它们在成功时返回非零值,但也GetLastError()
返回 0 或 ERROR_ALREADY_EXISTS
,具体取决于函数是返回新创建对象的句柄还是现有对象的句柄。 对于每个函数,都会相应地记录这一点。
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++如果采用类类型的函数被传递派生类型,有没有办法给出错误?
- 如果用户没有输入任何内容或输入错误,如何重新输入用户的输入?
- 如何用 C 编译,但如果使用任何C++,则会抛出错误?
- C++:如果括号为空,为什么不抛出错误对象?
- C++OpenSSL RSA_free如果也使用EVP_PKEY_free,则会给出分段错误
- 自定义runtime_error,如果我在 #what 中使用#c_str(),则错误输出始终为空
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 如果我不使用"新"关键字,为什么会出现细分错误?
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 如果用户输入的字符过多,则创建错误消息
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 如果 return 语句在带括号的循环中,错误可能会到达非 void 函数的末尾,但不会显示在没有括号的循环的情况下
- PC 林特,错误 613 和 "complicated" 如果
- 错误:如果(object1 == object2),“操作器==”无匹配(操作数类型为“ const class”和“
- GCC 错误:如果已知函数正常返回,则函数可能是属性"pure"的候选者
- 问题5.1-QMessageBox错误?如果在QDialog隐藏时调用了QMessageBox,则程序退出(0)
- c++ 14中语句(void)f()的状态是否格式错误?如果不是,f()部分是否为丢弃值
- std::is_default_constructible<T> 错误(如果构造函数是私有的)