工作问题积累(二)程序异常出错重启功能

【说明】:

      在MSDN找到SetUnhandledExceptionFilter函数,利用它,可以实现这个功能。其实这个过程叫做SEH("StructuredException Handling")结构化异常处理。是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。


一,处理函数
程序在出现异常时,会调用这个函数,我们就在这里处理程序荡后的所有事,包括重启。
原型:LONGWINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo);
我们这里先简单试验一下。

【代码部分】


 

<span style="font-size:14px;">1.LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{ 

MessageBox(NULL,"FreeEIM","FreeEIM",MB_OK);
 return EXCEPTION_EXECUTE_HANDLER;
}

2.然后在OnInitDialog()里加入:SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);

</span>


编译现在的程序.


二,构造重启函数

这里我们用到一个函数WinExec,函数比较常用,也可以用ShellExecute启动另个自己,下面代码用的是WinExec,

【代码部分】

1.LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
 char szFileName[256];
 ::GetModuleFileName(NULL, szFileName, _MAX_PATH);

 CString m_strPath = szFileName;
 if ( MessageBox(NULL,"程序 FreeEIM.exe 遇到问题异常退出,是否重启?","FreeEIM",MB_YESNO)
 == IDYES ){

 WinExec(m_strPath, SW_SHOW);


 }
 return EXCEPTION_EXECUTE_HANDLER;
}
2.然后在OnInitDialog()里加入:SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值