鱼C论坛

 找回密码
 立即注册
查看: 3438|回复: 0

[API档案] RaiseException

[复制链接]
发表于 2016-7-12 02:22:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 Diu 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

RaiseException 函数用于在调用线程中引发一个异常。


API 函数原型:

注释:_In_ 说明该参数是输入的。
  1. void WINAPI RaiseException(
  2.   _In_       DWORD     dwExceptionCode,
  3.   _In_       DWORD     dwExceptionFlags,
  4.   _In_       DWORD     nNumberOfArguments,
  5.   _In_ const ULONG_PTR *lpArguments
  6. );
复制代码


参数解析:

参数 含义
dwExceptionCode1. 将被引发的异样的由应用程序定义的异常码。一个异常处理器的过滤表达式和异常处理块可以使用 GetExceptionCode 函数来获取该值

2. 注意:系统会在显示信息之前清除 dwExceptionCode 参数的第 28 位,该位是一个系统保留的异常位,供系统自身使用
dwExceptionFlags1. 异常标志

2. 该成员可以为零,表示可继续分发的异常,或者为 EXCEPTION_NONCONTINUABLE,表示一个不可继续分发的异常

3. 任何企图在一个不可继续分发的异常之后继续执行将导致 EXCEPTION_NONCONTINUABLE_EXCEPTION 异常
nNumberOfArguments1. 指定 lpArguments 数组中的参数的个数

2. 该值不能超过 EXCEPTION_MAXIMUM_PARAMETERS

3. 如果 lpArguments 为 NULL,则该参数将被忽略
lpArguments1. 指向一个参数数组,这些参数可以包含任何应用程序所定义的需要传递给异常处理程序的过滤表达式的数据

2. 该参数可以为 NULL


返回值:

该函数没有返回值。


备注:

1. RaiseException 函数会启用一个进程并使用结构化异常处理来处理私有的,软件生成的,应用程序定义的异常。

2. 引发一个异常会导致异常分派器经过以下步骤来搜索异常处理程序:

  • 如果有调试器,系统首先尝试通知进程的调试器
  • 如果该进程没有被调试,或者相关的调试器不处理该异常,系统将尝试通过搜索发生异常的线程的堆栈来定位一个基于帧的异常处理程序。系统首先会搜索当前栈帧,然后继续向后搜索栈帧
  • 如果没有找到基于帧的异常处理程序,或没有基于帧的异常处理程序处理该异常,系统将会第二次尝试通知进程的调试器
  • 如果该进程没有被调试,或者相关的调试器不处理异常,系统将基于异常类型提供默认的处理程序。对于大多数异常,默认行为都是调用 ExitProcess 函数

3. dwExceptionCode, dwExceptionFlags, nNumberOfArguments 和 lpArguments 参数中定义的值可以在基于栈帧的异常处理程序的过滤表达式中通过调用 GetExceptionInformation 函数来获取。调试器可以通过调用 WaitForDebugEvent 函数来获取这些值。


需求:

Minimum supported client Windows XP[桌面应用程序 | Windows商店应用程序]
Minimum supported server Windows 2003 服务器版 [桌面应用程序 | Windows商店应用程序]
Minimum supported phone Windows Phone 8
Header WinBase.h(包含于 Windows.h)
Library Kernel32.lib
DLLKernel32.dll


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表