Windows异常由系统内核代码捕获,然后传递至用户层,多用于非法内存访问、指令错误等,其类型是CPU定义的,参见《X386保护模式编程》。
C++异常是C++编译器生成的结构(多在堆栈上),是普通的用户层代码,异常类型由用户自定义。
由于Windows异常处理和C++异常处理均使用堆栈展开,在局部堆栈的使用中存在冲突,一般不能混用。
__try{} __finally{}不会检查类内析构以及构造等操作
但是try() catch()不会存在这样的问题但是C++编译器上的所以异常类型需要你自己定义。
__try
{
......
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
wprintf(GetExceptionDescribe(GetExceptionCode()));
}
#pragma once
typedef struct tagExcpCode
{
DWORD dwCode;
LPTSTR lpDescribe;
}EXCPCODE,*PEXCPCODE;
EXCPCODE g_excp_table[]=
{
EXCEPTION_ACCESS_VIOLATION,
_T