zoukankan      html  css  js  c++  java
  • 第二十三章 终止处理程序

    ①SEH (structured excepttion handling)结构化异常处理 {终止处理程序,异常处理程序}

     终止处理程序:__try{/*try块*/}__finally{/*finally块*/}

    ②为什么使用结构化异常处理?

    • 清理工作集中在一个地方执行,保证得到执行
    • 可以提高代码可读性
    • 让代码更容易维护
    • 正确使用对程序性能和体积的影响是很小的

    ③清理工作集中在一个地方执行,保证得到执行例子 

      //try+finaly+leave应用例子//__leave导致代码执行控制跳转到try块的结尾。

    DWORD SEHExample()
    {
        HANDLE hfile = INVALID_HANDLE_VALUE;
        PVOID pvBuf = NULL;
    
        BOOL bReturn = FALSE;
        __try
            {
                DWORD dwNumBytesRead;
                BOOL bOk;
                hfile = CreateFile(TEXT("SOMEDATA.DAT"),GENERIC_READ,
                    FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
                if (hfile == NULL)
                {
                    __leave;
                }
    
                pvBuf = VirtualAlloc(NULL,1024,MEM_COMMIT,PAGE_EXECUTE_READ);
                if(pvBuf == NULL)
                {
                    __leave;
                }
    
                bOk =ReadFile(hfile,pvBuf,1024,&dwNumBytesRead,NULL)
                if(!bOk || (dwNumBytesRead == 0))
                {
                    __leave;
                }
    
                bReturn = TRUE;
            }
        __finally
        {
            if (pvBuf != NULL)
            {
                VirtualFree(pvBuf,MEM_RELEASE|MEM_DECOMMIT);
                pvBuf = NULL;
            }
    
            if (hfile != INVALID_HANDLE_VALUE)
            {
                CloseHandle(hfile);
                hfile = NULL;
            }
        }
        return bReturn;
    }
    __finaly注意事项
    • try块到finally的正常代码控制流
    • 局部展开:try中的提前退出 (goto,longjump,continue,break,return)强制进入finally块。
    • 全局展开:后两章详解
  • 相关阅读:
    【HIDS】关于HIDS的一些看法
    图片在容器内水平垂直居中显示
    C++ 实现Cholesky分解
    Minikube 安装和简单使用
    关于.net的一些记录
    C#将窗体Form嵌入主窗体Panel中的一些问题
    Pod持久化
    Maven打包包含jar包
    Adam
    [漏洞]DNS Server Spoofed Request Amplification DDoS
  • 原文地址:https://www.cnblogs.com/WillingCPP/p/3074414.html
Copyright © 2011-2022 走看看