1. c++异常和visual c++ seh的混合使用
我在part2介绍了structured exception handling(简称seh)。在那时我就说过,seh是window及其平台上的编译器专有的。它不是定义在iso c++标准中的,使用它的程序将不能跨编译器移植。因为我注重于标准兼容和可移植性,所以我对将windows专有的seh映射为iso标准c++的exception handing(简称eh)很感兴趣。
同时,我不是seh的专家。对它的了解绝大部分来自于本专栏前面的研究。当我考虑混合使用seh与eh时,我猜想解决方法应该是困难的和不是显而易见的。这是它花了我两个星期的原因:我预料到需要额外的时间来研究和试验。
很高兴,我完全错了。我不知道的是visual c++运行期库直接支持了绝大部分我所想要的东西。不用创造新的方法了,我可以展示你visual c++已经支持了的东西,以及改造为所需要的东西的方法。基于这个目的,我将研究同一个例子的四个不同版本。
1.1 version 1:定义一个转换函数
捆绑seh和eh的方法分两步:
l 一个用户自定义的转换函数来捕获seh的异常并将它映射为c++的异常。
l 一个visual c++运行期库函数来安装这个转换函数
用户自定义的转换函数必要有如下形式:
void my_translator(unsigned code, exception_pointers *info);