3080|5

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

我的程序貌似因为一行代码非法操作,为什么? [复制链接]

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()中用过。
谢谢大家!

最新回复

全解决了,结贴!  详情 回复 发表于 2007-9-12 19:40
点赞 关注

回复
举报

59

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
file.Read(&BUFF,size);

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

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
嗯    知道那种自带的文件读取方式      但在其他使用时候不如这个好    OK   我试试
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

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

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

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


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

 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
找到原因了,和楼上说的有些关系
文件不是用CArchive类来写入    所以,读就有问题
唉    EVC毛病太多。。
现在还有一个问题,就是现在能读了,但读出的字符串是输出在窗口上是空的,怎么办?
希望大家路过再帮帮我     

PS:楼上二位不急喔,我会尽快给分。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
全解决了,结贴!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表