📄 subject_55178.htm
字号:
<p>
序号:55178 发表者:鹏程 发表日期:2003-10-07 14:59:48
<br>主题:请朋友们给解释一下,谢谢了
<br>内容:void CEditorDoc::Serialize(CArchive& ar)<BR>{<BR> //CString s("");<BR> int nCount=0;<BR> CString item("");<BR><BR> if (ar.IsStoring())<BR> {<BR> // TODO: add storing code here<BR> POSITION pos;<BR> pos=lines.GetHeadPosition();<BR> if(pos==NULL)<BR> return;<BR> while(pos!=NULL)<BR> {<BR> item=lines.GetNext(pos);<BR> ar<<item;<BR> item.Empty(); //clear the line buffer<BR> }<BR> }<BR> else<BR> {<BR> // TODO: add loading code here<BR> while(1)<BR> {<BR> try<BR> {<BR> ar>>item;<BR> lines.AddTail(item);<BR> nCount++;<BR> }<BR> catch(CArchiveException *err)<BR> {<BR> if(err->m_cause!=CArchiveException::endOfFile)<BR> {<BR> TRACE0("Unknown exception loading file!\n");<BR> throw;<BR> }<BR> else<BR> {<BR> TRACE0("End of file reached...\n");<BR> err->Delete();<BR> }<BR> break;<BR> } //end of catch<BR> } //end of while(1)<BR> nLineNum=nCount;<BR> } //match of else<BR>}<BR><BR>上面函数中有多处不明白:<BR>(1)try--catch(CArchiveException *err)--throw;是什么意思?<BR><BR>(2)TRACE0(。。。。);是什么意思?<BR><BR>(3)书上说函数:item=lines.GetNext(pos);返回指针,可我不明白?<BR><BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:michael 回复日期:2003-10-07 16:08:27
<br>内容: 1 try catch throw 是ansi规定的面向对象语言的标准语句。不光C++有delphi也有。<BR>这是为了处理异常专门设计的。它可以大大提高程序的健壮性。比如:申请内存,结果有两种,一是申请到了,二是申请不到。发生第二种情况时,就会抛出一个异常,catch里的语句是用来处理异常的。这样起码在程序申请内存失败时程序不会死掉。而且还可以释放已申请的资源。<BR> 2 <BR>TRACE0( exp )<BR><BR>Parameters<BR><BR>exp<BR><BR>A format string as used in the run-time function printf.<BR>TRACE0 - Takes a format string (Only) and can be used for simple text messages which are dumped to afxDump<BR>摘自《MSDN》<BR>这其实是一个宏。他只有在debug模式下才起作用。他就像printf()只是把结果输出到VC6.0的OutPut窗口。以便与究错。<BR><BR> 3由于没有完全代码,我只能猜测Lines是一个对象的集合。可能是从CObList或它的自类的一个对象。这个集合对象里面存储的就是指向各个对象的指针。所以返回的是指针。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-10-07 16:51:02
<br>内容:我们真正想执行的是try块里的代码,但是代码执行时可能会发生异常,这时catch就会捕获到,我们就可以在catch块采取一些补救措施或是输出通知信息。<BR>MFC的好多函数的声明后面跟有throw(.....),这样的函数就能抛出异常,我们就可以把这种函数放在try块中,然后就可以从catch块中获得这个函数的执行情况。上面的代码中抛出异常的就是CArchive的<<函数。<BR><BR><BR>个人观点,有不对的地方请朋友们指正。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-10-07 19:57:21
<br>内容:上面的第三个问题,Lines是链表对象:CStringList Lines;按行保存文本。我不明白的是他如果返回指针,那么这个语句成立吗:item=lines.GetNext(pos);因为item是CString型的:CString item("");,所以我糊涂了。<BR><BR><BR><BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-10-07 20:46:49
<br>内容:To 3楼:<BR>typedef int* PINT;<BR>PINT p;<BR>你说p是不是指针
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-10-07 21:12:02
<br>内容:回楼上:<BR><BR>难道CString item("");句中的“CString”是:<BR><BR>typedef String* CString 吗?我只知道CString是一个类。<BR><BR>我真的不清楚。<BR><BR><BR><BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-10-07 21:17:21
<br>内容:const CString& operator =( LPCWSTR lpsz );<BR>throw( CMemoryException );<BR><BR>const CString& operator =( LPCSTR lpsz );<BR>throw( CMemoryException );<BR><BR>相信你可以明白了。<BR><BR><BR>2003-10-7 21:19:53
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -