• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

异常处理的基本问题

soarhigh 2001-07-20 11:02:06
In the following example, the try block attempts to write the headers. The catch block then handles a specific file exception, and passes all other exceptions on to the outer block with the throw macro:

// Example of the try and catch statements
try
{
// Write the file header
file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));
//
// Write the DIB header and the bits
file.WriteHuge(lpBI, dwDIBSize);
}
catch (CFileException* e)
{
::GlobalUnlock((HGLOBAL) hDib);
throw;
}

::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
请问,若try块中若无异常出现,则直接执行::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
是吗?
又try 块中无throw ,怎么把异常抛掷到catch块?
catch块中的throw 若起作用,是否就不执行::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
这两条语句。
...全文
107 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lz_0618 2001-07-21
正确:是否是若在try块中只要有异常,不管其中有没有throw语句,catch块都会执行异常处理
Try块中一般没有throw语句
回复
soarhigh 2001-07-20
是否是若在try块中只要有异常,不管其中有没有throw语句,catch块都会执行异常处理?
回复
soarhigh 2001-07-20
在本问题的try块中并未有throw 语句出现,那跟在其后的catch是否还执行呢?
回复
zzh 2001-07-20
其实也可以不必要把异常扔出去的,你可以通过在CATCH 块中作例外处理来完成这些功能啊
回复
lz_0618 2001-07-20
1,正确
2,又try 块中无throw,又无异常,永远也不会执行catch中的内容(用goto 语句也许可以,但我怎么也找不到理由这么用啊!)
3,catch块中的throw的作用,是告诉程序,该错误还没有处理完,将他转到上一级的catch块中,::GlobalUnlock((HGLOBAL) hDib); return TRUE;当然不再执行,若catch块中没有throw则::GlobalUnlock((HGLOBAL) hDib); return TRUE;肯定会执行的。
你可以编个简单的程序试一下:
void testFun()
{
try
{
throw new CException();
}
catch(...)
{
throw;
}
::AfxMessageBox("testFun--2");
}

void CTestDlg::OnButton2()
{
try
{
testFun();
}
catch (...)
{
::AfxMessageBox("Test 1");
}
}


回复
格利高里 2001-07-20
try块中没有异常,就不执行catch块中的代码的。有异常的话,就执行匹配catch块、以及后面的代码,但你的catch块中用了throw,则会转到上一级的catch块中执行。
回复
knight_z 2001-07-20
第一个问题,对你的回答是 Y。
第二个问题很模糊,一般来说当无异常的时候为了执行异常处理的代码会在try块的最后用
throw。既然没有异常发生何谈“异常抛到catch块?”呢。
异常处理中再抛出异常我没有试过。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-20 11:02
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……