首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

小弟我的程序貌似因为一行代码非法操作,为什么

2012-03-31 
我的程序貌似因为一行代码非法操作,为什么?BOOLCMessagesMenuDlg::OnInitDialog(){CDialog::OnInitDialog(

我的程序貌似因为一行代码非法操作,为什么?
BOOL   CMessagesMenuDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//   Set   the   icon   for   this   dialog.     The   framework   does   this   automatically
//     when   the   application 's   main   window   is   not   a   dialog
SetIcon(m_hIcon,   TRUE);//   Set   big   icon
SetIcon(m_hIcon,   FALSE);//   Set   small   icon

CenterWindow(GetDesktopWindow());//   center   to   the   hpc   screen

//   TODO:   Add   extra   initialization   here
SetWindowPos(&wndTopMost,0,0,320,240,SWP_SHOWWINDOW);

CString   strTemp1,strTemp2,strTemp3;
CMessagesMenuDlg   m1,m2,m3;
m1.OnPrepareMeasureCheck();
m2.OnWaitMeasureCheck();
m3.OnSaveDataCheck();
CFile   mFile1;
if(mFile1.Open(L "\\Storage   Card\\Radio1.TXT ",CFile::modeRead)   ==   0)
return   0;
else
{
CArchive   ar1(&mFile1,CArchive::load);
ar1   > >   strTemp1;//为什么不可以?
ar1.Close();
}
mFile1.Close();

if(   strTemp1.GetLength()   >   0)
{
//AfxMessageBox(L "8600 ");
((CButton   *)GetDlgItem(IDC_CHECK1))-> SetCheck(1);
}
return   TRUE;     //   return   TRUE     unless   you   set   the   focus   to   a   control
}

运行后,弹出一个错误对话框,关闭此对话框后又弹出一个对话框说   *****.exe程序非法操作,而,当我把ar1   > >   strTemp1;去掉就不会弹出任何错误,但,也就无法读出文件的内容了。   大家帮看看这个程序的问题出在哪,真的是在这行么?   这个读文件方法以前用都没出现这个问题,当然,以前没在OnInitDialog()中用过。
谢谢大家!

[解决办法]
file.Read(&BUFF,size);

为什么不直接用CFile自带的呢?

[解决办法]
通过存档存储及加载 CObject 需要额外注意。在某些情况下,应调用对象的 Serialize 函数,其中,CArchive 对象是 Serialize 调用的参数,与使用 CArchive 的“ < <”或“> > ”运算符不同。要牢记的重要事实是:CArchive 的“> > ”运算符基于由存档先前写到文件的 CRuntimeClass 信息构造内存中的 CObject。

因此,是使用 CArchive 的“ < <”和“> > ”运算符还是调用 Serialize,取决于是否需要加载存档基于先前存储的 CRuntimeClass 信息动态地重新构造对象。在下列情况下使用 Serialize 函数:

反序列化对象时,预先知道对象的确切的类。
反序列化对象时,已为其分配了内存。
警告 如果使用 Serialize 函数加载对象,也必须使用 Serialize 函数存储对象。不要使用 CArchive 的“ < <”运算符先存储,然后使用 Serialize 函数进行加载;或使用 Serialize 函数存储,然后使用 CArchive 的“> > ”运算符进行加载。


总之,如果可序列化的类将嵌入的 CObject 定义为成员,则不应使用该对象的 CArchive 的“ < <”和“> > ”运算符,而应调用 Serialize 函数。同时,如果可序列化的类将指向 CObject(或从 CObject 派生的对象)的指针定义为成员,但在自己的构造函数中将其构造为其他对象,则也应调用 Serialize。

热点排行