zoukankan      html  css  js  c++  java
  • Structed Exception Handler 学习总结(三)

    SEH的应用

    Windows操作系统和C/C++编译器虽然对SHE(结果化异常处理)提供了很好的支持,但是Win32 API自身却并没有使用该机制来报告程序执行过程中出现的异常。

    Win32 API对异常的处理是这样的:当有异常发生时,该API函数就会返回一些特定的值来表示函数调用失败了,这些值有,NULL, INVALID_HANDLE_VALUE, FALSE等,同时该API函数会使用SetLastError函数来设置一个基于线程的变量,该变量表示最近一次发生异常时的错误码,我们的程序在调用的API函数之后如果发现函数调用失败(即函数返回上述值)可以调用GetLastError来获得该错误码,通常这些错误码都是一些预定义的错误码(它们被定义在winerror.h文件中),所以我们可以通过该错误码获得一些与该异常相关的信息,利用这些信息来控制程序的执行流程。

    所以,在进行win32编程时,我们常常会有这样的代码样式:

        BOOL flag = Win32API();
    
        if(FALSE == flag)
    
        {
    
            switch(GetLastError())
    
            {
    
                case ERROR_CODE1:
    
                    //......
    
                    break;
    
                case ERROR_CODE2:
    
                    //......
    
                    break;
    
            }
    
        }
    
        else
    
        {
    
            //......
    
        }
    

     

    我们看到,这样的代码中通常会有许多分支判断和跳转,它会损伤程序的性能,同时降低代码的可阅读性。如果我们使用SEH机制,则代码会变得很清爽,例如;

    __try
    
    {
    
    //some my owner API call
    
    }
    
    __except(filter expression)
    
    {
    
    //exception handler
    
    }
    

     

    所以,SEH机制常常被用在第三方库中,或者我们自己编的应用时,也可以使用SEH来对底层的服务性API进行异常的抛出,这样我们在客户端代码中就可以使用try-except来处理异常了。

  • 相关阅读:
    mysql数据库备份脚本
    int main(int argc,char *argv[])参数的应用
    文件I/O实现cp复制功能
    网络通信TCP编程实例代码
    外部碎片、进程描述符、内部碎片
    程序、进程、作业、线程的关系
    word2016怎么从第三页开始设置页码
    ARMs3c2440开发板挂接NFS服务
    u-boot添加一个hello命令
    vi 编辑器跳转到指定行数
  • 原文地址:https://www.cnblogs.com/a-ray-of-sunshine/p/3416054.html
Copyright © 2011-2022 走看看