解密MFC中异常处理

在MFC中异常处理机制有两种:

  • C++异常,在MFC3.0或者以后的版本才可用
  • MFC异常宏,在MFC1.0或者以后的版本可用

如果你要用MFC,编写一个新应用程序,你应该使用C++异常机制,如果你现有的应用程序已近使用了MFC异常宏,你可以继续使用MFC异常宏。当然,你也可以用C++异常代替已有的MFC异常宏。

采用C++异常代替MFC异常宏优点:

  • 使用C++异常,编写的代码生成的模块(EXE,DLL)更小
  • C++异常关键字非常通用,它能处理任何异常类型(int,float,char 等等),而MFC异常宏仅能处理CException类和继承于CException的类

MFC异常宏和C++异常最大的区别是,当异常被捕获后,MFC异常宏会自动的delete掉捕获的异常,C++异常需要你手动的delete掉捕获的异常。

  • MFC异常宏

			TRY
			{
				// Execute some code that might throw an exception.
				AfxThrowUserException();
			}
			CATCH( CException, e)
			{
				// Handle the exception here.
				if (m_bThrowExceptionAgain)
					THROW_LAST();

				// 没必要删除e.

			}
			END_CATCH
  • C++异常

			try
			{
				// Execute some code that might throw an exception.
				AfxThrowUserException();
			}
			catch( CException* e )
			{
				// Handle the exception here.
				// "e" contains information about the exception.
				if (m_bThrowExceptionAgain)
					throw; // Do not delete e
				else
					e->Delete();//删除e,否侧引起内存泄露
			}

MFC异常宏,TRY, CATCH, AND_CATCH,
END_CATCH, THROWTHROW_LAST;C++异常关键字,try,catch,throw;用C++异常代替MFC异常宏,两者之间的替换如下:

TRY   (Replace it with try)

CATCH   (Replace it with catch)

AND_CATCH   (Replace it with catch)

END_CATCH   (Delete it)

THROW   (Replace it with throw)

THROW_LAST   (Replace it with throw)

P.S以上内容是参考MSDN2008所写。

时间: 2024-07-28 20:26:22

解密MFC中异常处理的相关文章

MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文 [转]

在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API.你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库 然后你来调用 只不过这个类不是你写的 MFC提供数百个类,最重要的.也是编写任何VC++应用程序都必不可少的两个类CWinApp和CFrameWnd,这两个类是编写复杂庞大应用程序的基石. 1>封装特性:构成MFC框架的是MFC类库而MFC类库又是C++的一个类库.这些类封装W

C++中读写文件过程中异常处理机制

在利用C++进行文件读取与写入过程中,无论是针对二进制文件还是文本文件均需要进行异常处理,在C++中我们可以利用CFile进行文件的读写,而在MFC中还可以利用CStdioFile进行文件的读写. 利用CFile进行读文本文件过程中的异常处理可以通过如下代码实现 CString m_strFileName = "test.txt"; CFile m_File; CFileException ex; if (!m_File.Open(m_strFileName,CFile::modeRe

MFC中的DC CDC HDC由来由去理解

MFC中的DC CDC HDC由来由去理解 在此非常感谢博客主的究竟钻研,非常详细的参考资料:http://blog.csdn.net/yam_killer/article/details/7661449

MFC中添加ToolTip提示框

PART 1 MFC 对话框中的 Buttton添加提示 例如我们想在一个对话框中的一个button控件添加tooltip,实现的方法如下: 1. 在该对话框的类中添加一个CToolTipCtrl类型成员,并在适当的地方将其初始化如下: m_ToolTipCtrl.Create(this); m_ToolTipCtrl.AddTool(GetDlgItem(IDC_BUTTON1), _T("This is ToolTip")); m_ToolTipCtrl.SetMaxTipWidt

MFC中消息响应机制

由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的宏. (1)在消息响应函数的原型代码中,函数声明的前部有一个afx_msg限定符,也是一个宏,该宏表明这个函数是一个消息响应函数的声明. (2)消息映射宏:在视图类的源文件中,BEGIN_MESSAGE_MAP()和 END_MASSAGE_MAP()这两个宏之间定义了消息映射表,例如对于画线,其中

MFC中模态对话框和非模态对话框

MFC的对话框非为两种,一种叫模态对话框(Modal  Dialog  Box,又叫做模式对话框),一种叫做非模式对话框(Modaless Dialog Box,又叫无模式对话框).两者的区别在于当对话框打开的时候,是否允许用户进行其他对象的操作. 一.模态对话框 模态对话框指,当用户需要对该对话框之外的其他对话框或者模块进行操作时,必须该对话框关闭,才能去编辑其他对话框或者模块. 创建如下: //创建模态对话框 CModalDialog modalDialog; modalDialog.DoM

MFC中添加新的对话框

MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Class,然后弹出的对话框中对新增的类进行设置,在Base Class需要选择CDialog,然后输入新增类的名称之后,就新增了一个类.这个类不仅有对应的头文件还有.cpp文件,以及一个与这个类对应的UI界面. 然后,需要将新增的类对应的头文件包含到它对应的父类的头文件中,同时在protected域中声

【转】MFC中调试过程中查看输出信息 -- 不错

原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MFC中浏览文件和浏览目录的实现[转]

1. 浏览文件 1 void CDlgCompare::OnBnClickedBtnSel() 2 { 3 // TODO: Add your control notification handler code here 4 UpdateData(TRUE); 5 CFileDialog fileDlg(TRUE); 6 fileDlg.m_ofn.lpstrTitle="文件打开对话框"; 7 fileDlg.m_ofn.lpstrFilter="All Files(*.*