_set_se_translator简介

像处理C++ 类型异常一样的处理Win32 异常(C 结构化异常) 

_se_translator_function _set_se_translator(
   _se_translator_function seTransFunction
);

参数

seTransFunction 指向C结构化异常的翻译函数的指针 返回值 前一个通过_set_se_translator注册的翻译函数指针,以便保存后用。如果之前没有设定,该返回值可以存放缺省行为;返回值可以为NULL.


备注

_set_set_translator 提供了一个方法,使我们可以像处理Win32 异常(C结构化异常)一样的处理C++类型的异常。为了使所有的C异常都能被C++的catch处理器接收,首先要定义一个从C异常派生的或者使用的类来指定相应的C结构异常。为了使用这个类,需要安装一个自定义的C异常内部处理机制,该内部处理在每次出现C异常时都会被调用。在你的翻译函数中,就可以抛出任何类型的能被C++ catch接收的异常。

必须使用/EHa 异常处理选项来使用_set_se_translator


为了指定一个自定义的翻译函数,调用_set_se_translator 并传入你的翻译函数作为它的参数。这个翻译函数在每次try块中的函数跑出异常时都会被调用。没有缺省的翻译数。 你的翻译函数只能用来抛出一个C++异常,而不应该做其他事情。如果你做了其他事情(如写一个日志文件)你的程序可能并不会按照预期执行,因为该函数执行的次数是平台相关的。 在多线程的环境中,翻译函数对每个线程来说是独立的。每个新建的线程都要安装它自己的翻译函数,因此,每个线程会调用自己的翻译函数。_set_se_translator 只对指定的线程有效。另一个dll可以安装一个不同的翻译函数。 seTransFunction 函数必须是本地编译的函数(不能使用/clr)编译选项。必须携带一个_EXCEPTION_POINTERS 结构指针作为参数。这个参数必须是Win32 API GetExceptionCode 和GetExceptionInformation 函数各自返回的值。
typedef void (*_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS* );
对于_set_se_translator 来说,暗示使用的是动态链接的C运行时库。另外一个的dll可能会调用 _set_se_translator 来替换你自己的翻译函数。当在托管代码(使用/CLR选项编译的代码)或者混合的本地托管代码中使用_set_se_translator时,当心那些仅仅是本地代码影响的翻译函数。任何托管代码产生的托管异常(例如:System::Exception)并不会通过翻译函数。Win32 函数RaiseException 或者诸如除零等系统异常通过翻译函数。
依赖项

Routine

Required header

_set_se_translator

<eh.h>

该函数在/clr:pure 编译选项编译的代码中不起作用。 获得更多兼容信息,查看Compatibility。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值