异常处理__try{}__except(EXCEPTION_EXECUTE_HANDLER){}

在一个函数中不能混合使用

try{}catch(CException *e){}

__try{}__except(EXCEPTION_EXECUTE_HANDLER){}

编译时报错

error C2713: 每个函数只允许一种异常处理方式

解决方法:

将__try__except代码单独成一个函数

void robustMemcpy()

{

  __try
  {

    memcpy(dstMapAddress, buffer, dwBlockBytes);
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
     
  }

}

//以下C++函数调用一个使用SEH异常处理的函数

void cpp_funtion()

{

  robustMemcpy();

  try
  {

    //...
  }
  catch(CInternetException *pEx)
  {
     TCHAR szErr[1024];
     if (pEx->GetErrorMessage(szErr, 1024))
     AfxMessageBox(szErr, MB_OK);
     pEx->Delete();
  }

}

时间: 2024-08-04 08:35:19

异常处理__try{}__except(EXCEPTION_EXECUTE_HANDLER){}的相关文章

窥探try ... catch与__try ... __except的区别

VC中的这两个东西肯定谁都用过, 不过它们之间有什么区别, 正好有时间研究了一下, 如果有错误欢迎拍砖.基于VC2005, 32位XP 平台测试通过. 估计对于其他版本的VC和操作系统是不通用的. 1. try ... catch 这个是C++语言定义的, 每个C++都有对其的不同的实现. 使用也很简单. 比如我们有一个函数, 读入年龄. 如果<=0 或者 >=100, 抛出异常: int readAge() {   int age = 读入年龄;   if (age <=0 || ag

C++异常处理机制几种方法

一.异常 迄今为止,我们处理程序中的错误一般都是用if语句测试某个表达式,然后处理错误的特定义代码. C++异常机制使用了三个新的关键字  (SEH(结构化异常处理)) try    ──标识可能出现的异常代码段 throw  ──抛出一个异常 catch  ──标识处理异常的代码段 提示: 使用异常处理将带来更多的系统开销.因此慎用异常. 二.抛出异常 throw throw必须在 try代码块中.后边跟的值决定抛出异常的类型. 三.捕获异常 catch 出现在try代码块后,后边跟的数据决定

Windows结构化异常处理浅析

近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差错,但是总不能出现断线丢失数据状态.故刚好通过处理该问题,找到了一些解决方案,怎么捕获访问非法内存地址或者0除以一个数.从而就遇到了这个结构化异常处理,今就简单做个介绍认识下,方便大家遇到相关问题后,首先知道问题原因,再就是如何解决.废话不多说,下面进入正题. 什么是结构化异常处理 结构化异常处理(

异常处理.VC++

ZC:个人这样 理解 C++的异常处理: ZC: (1).C++标准异常处理,try{}catch{} 抛异常:throw() [ 据说是包装的Windows函数RaiseException() ] ZC: (2).VC++异常处理 __try{}__except{} 抛异常:RaiseException() ZC: (3).CRT 包装后的异常处理 1.资料: 1.1.C++及Windows异常处理(try,catch; __try,__finally; __try, __except)--一

SEH反调试的实现与调试

SEH用于反调试或者用于注册码的隐藏时.在没有异常时永远都是错误的注册码,只有当触发异常时,程序才走到注册成功的地方-- 代码如下: void CSehDlg::RegSuc() { HWND hWnd = ::GetDlgItem(NULL, IDC_STC_TIP); ::SetWindowText(hWnd, "Success!!"); } void CSehDlg::RegFail() { HWND hDlgWnd = AfxGetApp()->GetMainWnd()-

bcb 如何在DLL中捕捉系统级异常

http://topic.csdn.net/t/20031023/09/2385627.html -------------------------------------------------- 我创建了一个动态库,库中实现了对Socket(TCP.UDP)的封装,其中使用了BCB的TClientSocket,当使用该ClientSocket去连接一个并不存在的服务器时必然导致会ESocketError异常.问题:我该如何捕捉到该异常? 如下代码明显不行,请哪位高手帮帮忙!!!!!!!!!!

Windows SEH学习 x86

windows 提供的异常处理机制实际上只是一个简单的框架.咱通常所用的异常处理(比如 C++ 的 throw.try.catch)都是编译器在系统提供的异常处理机制上进行加工了的增强版本.这里先抛开增强版的不提,先说原始版本.     原始版本的机制很简单:谁都可以触发异常,谁都可以处理异常(只要它能看得见).但是不管是触发还是处理都得先注册.系统把这些注册信息保存在一个链表里,并且这个链表保存在线程的数据结构里.也就是说,异常所涉及的一些行为都是线程相关的.比如,线程 T1 触发的异常就只能

【逆向知识】除0异常-编程与逆向

1.简介 重温编程和反调试的知识. 2.编程知识 整体界面长这个样子,然后拖控件,按钮点击事件. 按钮点击事件的函数编写 获取用户名与密码的值,然后取出用户名的最后一位判断是不是0,如果是0就进入判断函数内,否则就输出注册失败的提示. void CSehDlg::OnReg() { // TODO: Add your control notification handler code here CString strName; CString strCode; GetDlgItemText(ID

【 转】__try,__except,__finally,__leave异常模型机制

转自:http://blog.csdn.net/wwl33695/article/details/8686458 导读: 从本篇文章开始,将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.主人公阿愚将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结. 深入理解请参阅<<windows 核心编程>>第23, 24章. SEH实际包含两个主要功能:结束处理(terminatio