__try 不能在有 CString 的函数中使用?

happyhuang 2003-06-19 09:21:25
warning C4509:
nonstandard extension used: 'OnClear' uses SEH and 'str' has destructor

error C2712: Cannot use __try in functions that require object unwinding

...全文
111 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyhuang 2003-06-19
  • 打赏
  • 举报
回复
finally块都会执行的,不管是否有异常
不过的确不应该把有兮构函数的对象和try一起用

大家对“在函数的末尾集中处理错误信息的方法”有什么更好的建议,
欢迎踊跃发言!今天晚上结贴给分!
yndfcd 2003-06-19
  • 打赏
  • 举报
回复
可以把str的声明放在finally块中。
zfive5说得很对,的确不能这样用,因为finally块只有异常时才会执行,执行后,函数结束,析构函数没有机会执行。如果允许这样做的话,程序仍然会崩溃,这出违背了结构化异常处理的初衷。
happyhuang 2003-06-19
  • 打赏
  • 举报
回复
sigh, 终于自己在微软的知识库中找到了

DOC: Description of Compiler Error C2712 is Incorrect

SUMMARY
The online Help for compiler error C2712 ("cannot use __try in func with object unwinding") states:

To avoid this error message, compile using /GX option.
This is incorrect. It should read that the workaround is to compile with /GX-, which instructs the compiler to disable C++ exception handling unwinding.

谢谢大家了,结贴给分
happyhuang 2003-06-19
  • 打赏
  • 举报
回复
问题在于有的时候出错了不一定会抛出异常,那么catch的出错处理就不起作用了

我的用意,是打算在函数的末尾集中处理错误信息,那样程序看起来就简洁清晰很多
Crob 2003-06-19
  • 打赏
  • 举报
回复
可以用下面的

TRY
{
CString szTest="";
}
CATCH(CFileException, e);
{

}
END_CATCH
SZSGL 2003-06-19
  • 打赏
  • 举报
回复
同意
zfive5(醉马不肖)
的观点。
醉马不肖 2003-06-19
  • 打赏
  • 举报
回复
void CTSendView::OnClear()
{
CString str;

__try
{
}
__finally
{
}
}

这样,不行,在包含finally的函数里,
不能有含有析构函数的对象定义,可以这样写:
void CTSendView::OnClear(CString &str)
{
__try
{
}
__finally
{
}
}
happyhuang 2003-06-19
  • 打赏
  • 举报
回复
try是标准C++的,__try是windows的

其实我本来是想用 __finally 来做些退出后的事情,但是 ...
potatoli 2003-06-19
  • 打赏
  • 举报
回复
好像__try是标准c++的东西,用try/throw/catch试试
happyhuang 2003-06-19
  • 打赏
  • 举报
回复
很简单的代码:

void CTSendView::OnClear()
{
CString str;

__try
{
}
__finally
{
}
}
sstower 2003-06-19
  • 打赏
  • 举报
回复
不可能哦,把代码贴出来看看

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧