518抽奖软件源码之:使得除零异常可被捕获(VC2015)

发布时间:2020-08-02 14:58:05 作者:wsg1212
来源:网络 阅读:337

518抽奖软件源码之:使得除零异常可被捕获(VC++)

在开发“518抽奖软件”的时候,需要捕获硬件异常,例如除零等。 但是发现__try/__except没有捕获各异常,问题出在那里呢?经研究找到了解决方法,开发工具是VC2015,源码如下。

_controlfp 启用除零异常


	int cw = _controlfp(0, 0); //原始控制字
	cw &= ~(EM_ZERODIVIDE); // cw &= ~(EM_OVERFLOW | EM_UNDERFLOW | EM_INEXACT | EM_DENORMAL);
	_controlfp(cw, MCW_EM); // ~:取反       _controlfp 停用异常(1:停用;0:启用)

在“项目-属性-C++代码生成”里设置


1. 启用C++异常项: 选 /EHa
2. 安全检查项:选 禁用安全检查(这个是关键,网上搜的资料都没说这个,害我耗费很多功夫)

结构化异常处理代码


	__try
	{
			if (!g_app.init_app(g_app.m_hInst))
				return;

			MSG msg;
			while (GetMessage(&msg, NULL, 0, 0))
			{
				if (g_app.m_bPb)
				{
					if (!TranslateAccelerator(g_app.m_hMain, hAccelPb, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
				}
				else if (g_app.m_bSc)
				{
					if (!TranslateAccelerator(g_app.m_hMain, hAccelSc, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
				}
				else
				{
					if (!TranslateAccelerator(g_app.m_hMain, hAccel, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
				}
			}
	}
	__except(1)
	{
		// 弹出异常消息或处理
	}
推荐阅读:
  1. 浅谈vue方法内的方法使用this的问题
  2. Oracle 12c nocdb怎么转换成cdb

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

异常捕获 可被 18

上一篇:String类型的属性和方法

下一篇:Oracle表空间

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》