Visual Studio 6何时捕获结构化异常?

时间:2010-07-27 18:28:40

标签: c++ visual-studio exception vc6 seh

这主要是好奇心,但我一直在阅读Visual Studio在C ++ try-catch构造中捕获SEH异常的历史。我一直在运行这个断言,即启用了/ GX标志的旧版本Visual Studio会“忽略”在C ++ catch块中捕获结构化的Win32异常。

在使用/ GX标志构建时,Visual Studio 6.0在以下代码中何时进入catch块?

char * p = NULL;

try
{
    *p = 'A';
}
catch(...)
{
    printf("In catch\n");
}

在我自己的简单测试中,使用Visual Studio 6 + SP6程序执行暂停,并且没有未处理的异常,并且永远不会打印“In catch”。但是,有些文章(如this之一)让我相信可以输入catch块。

1 个答案:

答案 0 :(得分:0)

int main()
{
    __try
    {
        int *pInt = NULL;
        *pInt = 0;// throw some kind of exception
    }
    __except( EXCEPTION_EXECUTE_HANDLER )
    {
        DWORD dw = GetExceptionCode();
        switch(dw)
        {
        case EXCEPTION_ACCESS_VIOLATION:
            cout << "access violation\n";
            break;
        case EXCEPTION_INT_DIVIDE_BY_ZERO:
            cout << "int divide by zero\n";
            break;
        case EXCEPTION_FLT_DIVIDE_BY_ZERO:
            cout << "floating point divide by zero\n";
            break;
        // other cases
        }
    }
    return 0;
}

多数民众赞成也许是我找到网络的唯一方式。

另外,我可以猜测即使你知道为什么处理这些例外并不好,仍然是来自这里的googlers,请阅读:

http://members.cox.net/doug_web/eh.htm#Q1