2011-02-19 141 views
0

首先,C++中是否存在不可捕捉的异常?不可捕捉的异常?

我见过一个2005年微软kb article,讨论在一个DLL引发的异常,不能在另一个DLL被抓住。看起来这是用多年前的一个修补程序解决的,但我现在可能会遇到这个问题 - 使用Visual C++ 2008.

具体而言,基于崩溃后的小型转储文件报告,在调用:: fgetpos I期间“M看到的是:

kernel32!UnhandledExceptionFilter+0x55b

两件事情在我的头上弹出。首先我注意到指定的catch块,位于与调用DLL分离的DLL中,没有捕获异常!这是知识产权文章描述的重复吗?其次,我怀疑kernel32“未处理的异常”是否是Visual C++ catch块无法捕捉的。我认为使用“全能”elipses就足够了。

有什么我失踪了吗?

+0

抛出的异常是什么?你还使用C++或SEH异常处理程序吗?如果没有异常处理程序处理异常,则UnhandledExceptionFilter进程会处理异常,但异常可能已由代码处理。 – Avilo 2011-02-19 03:16:04

回答

4

您需要区分C++异常和SEH例外。内核对C++异常一无所知,并且C++ catch()对SEH一无所知(除非启用了扩展catch处理)。 SEH异常捕获block_try和_finally。这些是非常不同的,而且不应该混淆。