WINAPI GetLastError与C ++关键字投掷

时间:2010-04-29 14:14:16

标签: c++ winapi exception custom-errors

WINAPI SetLastError()和C ++关键字throw之间有什么区别?例如,SetLastError(5);throw 5;是一样的吗?

2 个答案:

答案 0 :(得分:8)

SetLastError设置一个简单的全局变量,它对程序流没有任何作用。

throw将停止正在运行的程序的流程,展开堆栈直到它被一个try-catch子句捕获到某处。然后程序流将从捕获结束开始继续。

我建议阅读this文章,该文章解释了例外的概念。并阅读C ++异常。

  • 另外,不要抛出5,抛出一个非内置对象,最好是由std :: exception继承。对象可以包含一些告诉catch子句如何处理错误的状态。

答案 1 :(得分:4)

throw抛出一个由catch块捕获的异常,它是C ++语言的一部分。 SetLastError()是Microsoft特定于Windows的API的一部分,用于更改GetLastError()返回的值。换句话说,它们完全不同!抛出异常会展开堆栈(调用所有局部变量的析构函数)并将程序执行移动到适当的catch块。 SetLastError()没有这样做,它只是一个API函数。