c ++ try-except语句

我遇到了关于检测VMWare或虚拟PC的文章
http://www.codeproject.com/KB/system/VmDetect.aspx
我看到他们使用某种try-except语句。
所以我在MSDN中查找: http : //msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspx

我不明白为什么我会使用一个尝试,而不是旧的尝试。 它只是给我关于例外的额外信息?
如果是这样,当我使用附件中的代码时,我可以使用try-catch,对吗?
谢谢 :)

__try / __except 一个try / catch ,用于不同类型的异常。 您可以捕获硬件异常,如浮点违例,错误的指针去引用等,而不是C ++异常。 这被称为结构化异常处理(SEH),如果你知道在哪里寻找,MSDN有很多。

在这种情况下,他们正在使用它来检测无效指令。 这是他们试图执行x86不支持的指令的地方,而虚拟机使用它们。 如果你在一个真正的CPU上运行,那么你会得到一个无效的指令异常,如果你正在虚拟机上运行,​​你只是跟它说话。

MSDN通常不清楚所有这些,但__try / __except处理的__try不是C ++异常,而是系统异常。 像分段错误。

__try__except是结构化异常处理的一部分,与标准异常处理模型相比,这是一种不同的异常处理模型,因为它处理与软件异常相同的硬件异常,请参阅链接获取信息。

在实际的C ++标准开始包含异常之前,Microsoft为Microsoft C ++创建了结构化异常处理。 因此,在Windows上,所有存在的异常都是SEH异常,但并不是所有这些都是C ++异常。

__try / __except是一种捕捉SEH异常(以及偶然也是C ++异常)的方法。 try / catch是只捕获C ++异常的方法。 我还记得,在一个函数中不能使用这两个函数是有限制的,但是很容易解决这个问题。

为了使用,只要使用try / catch就可以了。 如果有人明确地抛出一个SEH异常(除以零,空指针解引用等),抓住它,并将其转换为常规程序流,例如使其成为常规异常或停止软件。

__try__finally__finally子句用于结构化异常处理 ,这是Windows抛出异常的异常处理机制。 它们与C ++异常不一样。