zoukankan      html  css  js  c++  java
  • Release+非MFC不能使用VERIFY如何产生中断

    网上看到有些人是自己封装了一些中断函数,比如调用__asm{INT 21H};等。
    突然想到,可以直接用C++语言本身提供的try..catch语句啊。FOOL -.-

    写了一个测试类:

    #pragma once
    
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    class CTestClass
    {
    public:
        CTestClass(UINT64 qwPosBegin, UINT64 qwPosEnd)
        {
            try
            {
                INT64 qwSize = (INT64)(qwPosEnd - qwPosBegin);
                if(qwSize < 0)
                    throw qwSize;
    
                m_qwPosBegin = qwPosBegin;
                m_qwPosEnd = qwPosEnd;
                m_qwSize = m_qwPosEnd - m_qwPosBegin;
            }
            catch(INT64 &qwSize)
            {
                const int BUF_LEN = 100;
                WCHAR szBuff[BUF_LEN] = {0};
                swprintf(szBuff, BUF_LEN, L"Segment length is negative! Value: %I64d", qwSize);
                ::MessageBoxW(NULL, szBuff, L"Error", MB_OK|MB_ICONERROR);
    //delete this; } }
    ~CTestClass() { cout<<"This is Destruct Method"<<endl; m_qwPosBegin = 0; m_qwPosEnd = 0; m_qwSize = 0; OutputInfo(); } void OutputInfo() { cout<<"Pos Begin: "<<m_qwPosBegin<<endl; cout<<"Pos End: "<<m_qwPosEnd<<endl; cout<<"Segment Len: "<<m_qwSize<<" "<<endl; } private: UINT64 m_qwPosBegin;//using UING64 instead of INT64 to contain as more data as possible UINT64 m_qwPosEnd; UINT64 m_qwSize; };

    调用代码:

    void main()
    {
    #define SAFE_DELETE_OBJECT(obj) if(obj) { delete obj; obj = NULL;}
    
        CTestClass* obj1 = new CTestClass(10, 100);
        if(obj1)
            obj1->OutputInfo();
    
        
        CTestClass* obj2 = new CTestClass(100, 10);
        if(obj2)
            obj2->OutputInfo();
    
        SAFE_DELETE_OBJECT(obj1);
        SAFE_DELETE_OBJECT(obj2);
    
        system("pause");
    }

    测试输出结果:

    Pos Begin:      10
    Pos End:        100
    Segment Len:    90

    Pos Begin:      13451671603782742029
    Pos End:        13451671603782742029
    Segment Len:    13451671603782742029

    This is Destruct Method
    Pos Begin:      0
    Pos End:        0
    Segment Len:    0

    This is Destruct Method
    Pos Begin:      0
    Pos End:        0
    Segment Len:    0

    请按任意键继续. . .

    一点解释:throw之后就会跳出整个try块,因此可能出问题的代码要写在最前面--所谓“要写异常安全的函数”  呵呵 有歧义 这里的"异常"是“Exception” n. ,而非“Extraordinary” adj. 的意思 -.-

  • 相关阅读:
    【转】ORACLE Dataguard安装
    win7 配置微软的深度学习caffe
    深度学习-开源方案
    Python之包管理工具
    C#调用Python脚本的简单示例
    转Python 和C#的交互
    转-使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
    转-在Mac OS上搭建Python的开发环境
    Weex入门与进阶指南
    A couple of notes about .NET Framework 4.6 setup behaviors
  • 原文地址:https://www.cnblogs.com/tupx/p/3485306.html
Copyright © 2011-2022 走看看