1、ZC:始终没有找到,能像Delphi7里面那样能抛 字符串描述 的异常信息。(难道Delphi是这样做的?:在程序的最外围 套了一层异常捕获,然后在获取到异常之后,自己再将异常信息弹出来,我们写的字符串信息 可以通过 _EXCEPTION_RECORD.ExceptionInformation来保存)[ 下面有我的猜测Delphi7中的做法 ]

  ZC:这里就 使用 异常Code 来区分异常吧。本来想使用 0xFFFF???? 来表示 我的异常Code的,但是 实际运行发现 跑出来的异常代码变成了 0xEFFF????,于是改为使用 0xCCCC????,这个看了一下 没有变化...

2、简单 抛异常 WindowsAPI:

RaiseException(
__in DWORD dwExceptionCode,
__in DWORD dwExceptionFlags,
__in DWORD nNumberOfArguments,
__in_ecount_opt(nNumberOfArguments) CONST ULONG_PTR *lpArguments
);

  2.1、我的抛异常使用:RaiseException(0xCCCC????, EXCEPTION_NONCONTINUABLE, 0, NULL);

    ZC:第二个参数 如果不是EXCEPTION_NONCONTINUABLE,而是 0 的话  表示(exe)可以继续执行

  2.2、我的捕获异常的使用:

void main()
{
__try
{
RaiseException(0xCCCC0001, EXCEPTION_NONCONTINUABLE, , NULL);
}
__except( ExceptionFilterZ( "main(...)", GetExceptionCode() ) )
{
printf("Catch an exception\n");
} printf("main() out.\n");
system("pause");
}
long WINAPI ExceptionFilterZ(char* _pcFuncName, DWORD _dwExceptionCode)
{
//return (_dwExceptionCode == STATUS_STACK_OVERFLOW) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; printf_s("==> ==> ==> %s catch exception , _dwExceptionCode : %d(0x%08X)\n",
_pcFuncName, _dwExceptionCode, _dwExceptionCode); return EXCEPTION_EXECUTE_HANDLER; //#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
//STATUS_STACK_OVERFLOW
}

3、我猜 Delphi7中可能是这样做的:

  通过 struct _EXCEPTION_POINTERS 保存程序员输入的 字符串信息,在异常发生时 再将它取出来显示

  3.1、测试代码:

long WINAPI ExceptionFilterFunc(char* _pcFuncName, struct _EXCEPTION_POINTERS *_exception_info)
{
//return (_dwExceptionCode == STATUS_STACK_OVERFLOW) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; DWORD dwExceptionCode = _exception_info->ExceptionRecord->ExceptionCode;
printf_s("==> ==> ==> Catch exception !!! Func name :%s, _dwExceptionCode : %d(0x%08X)\n",
_pcFuncName, dwExceptionCode, dwExceptionCode); DWORD dwNumberParameters = _exception_info->ExceptionRecord->NumberParameters;
printf("\t NumberParameters :%d\n", dwNumberParameters);
if (dwNumberParameters == )
{
ULONG_PTR ulp = _exception_info->ExceptionRecord->ExceptionInformation[];
char* pc = (char*)ulp;
printf("\t Information :%s\n", pc);
delete[] pc;
} return EXCEPTION_EXECUTE_HANDLER; //#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
//STATUS_STACK_OVERFLOW
} void main()
{
__try
{
char* pcMsg = "zc test exception msg .";
char* pc = new char[strlen(pcMsg) + ];
pc[strlen(pcMsg)] = '\0';
memcpy(&pc[], &pcMsg[], strlen(pcMsg));
ULONG_PTR ulps[EXCEPTION_MAXIMUM_PARAMETERS] = {};
ulps[] = (ULONG_PTR)pc;
RaiseException(0xCCCC0001, EXCEPTION_NONCONTINUABLE, , &ulps[]); //GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
}
__except( ExceptionFilterFunc( "main(...)", GetExceptionInformation() ) )
{
printf("Catch an exception\n");
} printf("main() out.\n");
system("pause");
}

4、

5、

VC异常.简单抛,简单捕获的更多相关文章

  1. Java异常与异常处理简单使用

    异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...

  2. C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

    对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...

  3. java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误

    /** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...

  4. java 自己定义异常,记录日志简单说明!留着以后真接复制

    log4j 相关配制说明:http://blog.csdn.net/liangrui1988/article/details/17435139 自己定义异常 package org.rui.Excep ...

  5. C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全

    前言: C++的异常处理机制是用于将运行时错误检测和错误处理功能分离的一 种机制(符合高内聚低耦合的软件工程设计要求),  这里主要总结一下C++异常处理的基础知识, 包括基本的如何引发异常(使用th ...

  6. miniSipServer简单而不简单,轻松落地,实现电脑对固话、手机通讯

    最近沉迷于SIP通讯,网内通讯全免费,落地也就几分钱,而且无漫游全国拨打,想想真是心动呢,只要有网落就ok!. 对于sipserver,现在的市场上软件很多,免费的.收费的应有尽有,这里不一一例举.综 ...

  7. php异常及错误信息捕获并记录日志实现方法全解析

    php异常处理 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法.异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码 ...

  8. springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能

    转自:https://blog.csdn.net/thinkingcao/article/details/52472252 C 所用到的jar包     数据库表 数据库表就不用教大家了,一张表,很简 ...

  9. java中异常的抛出:throw throws

    java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...

随机推荐

  1. echarts报错Can't get dom width or height

    echarts图无法显示 一直报错Can't get dom width or height 原因:显示echarts图的div要设置宽高 报错前: <div class="left_ ...

  2. 【linux应用】将一个大文件按行拆分成小文件

    例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt #读出BLM.txt有多少行. 再利用 split 命令 ...

  3. react复习总结(2)--react生命周期和组件通信

    这是react项目复习总结第二讲, 第一讲:https://www.cnblogs.com/wuhairui/p/10367620.html 首先我们来学习下react的生命周期(钩子)函数. 什么是 ...

  4. linux 文件 md5校验

    为解决官方发布的软件包被别人更改或者软件在传输过程中出现传输错误等问题,软件官方在提供软件包的同时,还提供一个保存MD5校验码的文件. Linux/unix中可以使用命令 # md5sum 文件名 方 ...

  5. javascript 点击按钮实现隐藏显示切换效果

    原文链接:http://www.jb51.net/article/79083.htm <html> <head> <meta charset="gb2312&q ...

  6. bzoj 2844 albus就是要第一个出场 - 线性基

    题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排 ...

  7. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 831C) - 暴力 - 二分法

    Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain ...

  8. tar+nc传输文件的使用

  9. 尚硅谷面试第一季-11MyBatis中当实体类中的属性名和表中的字段名不一样怎么办

    问题: MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 解决方案: 1.写sql语句时起别名 <!-- id属性:必须是接口中方法的方法名 resultType属性:必须是 ...

  10. MVC 自定义特性(验证用户登录session是否已经过期)

    新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...