能力值:
( LV2,RANK:10 )
2 楼
UnhandledExceptionFilter处理不了还会再一次交给VEH处理,但是这个句柄是用AddVectoredContinueHandler注册的
不过Win7下这个又有了一些变化,详见https://blogs.msdn.com/b/zhanli/archive/2010/06/25/c-tips-addvectoredexceptionhandler-addvectoredcontinuehandler-and-setunhandledexceptionfilter.aspx?Redirected=true
能力值:
( LV12,RANK:250 )
3 楼
我看了一下AddVectoredContinueHandler,不支持我的Xp32
然后在我的Win8 64位上跑的时候,发现是不起效果的,使用AddVectoredContinueHandler注册的Handler不会被执行。
MSDN上也没说明一下
蛋都碎了
能力值:
( LV2,RANK:10 )
4 楼
祝你侄子生日快乐
能力值:
( LV13,RANK:400 )
5 楼
AddVectoredContinueHandler是在Windows XP Professional x64 Edition以及之后的系统中才有。
能力值:
( LV2,RANK:10 )
6 楼
学习了,谢谢了
能力值:
( LV13,RANK:400 )
7 楼
文中有一些基本知识的误区。
LONG FirstSEHer( PEXCEPTION_POINTERS pExcepInfo )
LONG SecondSEHer( PEXCEPTION_POINTERS pExcepInfo )
这些函数只是exception过滤函数,并不是真正的exception hanlder
真正的SEH exception handler 是每一个_try块后面跟随的_except块中的内容。
另外__ finally子句块的内容也是一个很有深度的内容,建议把这块内容也讲出来,最后__finally和_except结合在一起的时候,又会是更有趣的内容。
能力值:
( LV12,RANK:250 )
8 楼
你说FirstSEHer只是exception过滤函数这个观点我不认同。其实FirstSEHer可以做任何事。反而__except内部可以做的事情就受到限制了,因为只有FirstSEHer返回EXCEPTION_EXECUTE_HANDLER时才会进入__except内。
__try _except __ finally是VC辅助实现的,SEH链的构造和分发过程确实有好多值得学习和借鉴的地方。过段时间打算写一个可以在非VC(gcc、clong等)中使用的SEH框架。
感谢关注
能力值:
( LV12,RANK:250 )
9 楼
不知道为啥Win8上失效了,WIn7好像也不可以
能力值:
( LV5,RANK:60 )
10 楼
先顶再看
能力值:
( LV4,RANK:50 )
11 楼
慢慢看,学习了
能力值:
( LV2,RANK:10 )
12 楼
好文章,学习了~
能力值:
( LV2,RANK:10 )
13 楼
不得不读
能力值:
( LV9,RANK:200 )
14 楼
好文章,学习了~
能力值:
( LV3,RANK:20 )
15 楼
MSDN上有如下说明:
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0500 or later. For more information, see Using the Windows Headers.
我印象中,较老的编译器编译出来的EXEPE头中,OS Version和Subsystem Version两个成员值都是4.0,也就意味着在Win2K上都能跑。
AddVectoredContinueHandler是XP后才出现的,所以只能支持Win5.1及其以后版本,所以OS Version和Subsystem Version必须大于5.0。
我现在用着Win8 64位,弄弄看是不是这个问题
能力值:
( LV3,RANK:20 )
16 楼
我的Win8 64位AddVectoredContinueHandler注册的Handler有效,跑起了,用的是12.0的编译器,OS Version和Subsystem Version两个成员值是6.0。但我把他俩改成4.0,VEH还是有效。。。。纳闷了
能力值:
( LV2,RANK:10 )
17 楼
PE文件头那两个值只在加载时有用,跟执行无关