CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

非模式对话框中读取文件出错

楼主wsw1978(wsw1978)2004-12-03 15:49:59 在 VC/MFC / 界面 提问

我定义一个非模式对话框有一个CFile的指针,文件是在主窗体中打开的,通过指针传递到非模式对话框中代码如下  
                    CFile   sfile(filename,CFile::modeRead|CFile::typeBinary);  
  SendFileForm     m_SendForm;  
  m_SendForm.m_FileName=sfile.GetFileName();//取得文件名  
  m_SendForm.m_FileSize=sfile.GetLength();//取得文件大小  
  m_SendForm.m_DK=12000;//确定端口  
  m_SendForm.pos=0;  
  m_SendForm.m_SendFile=&sfile;//传递指针  
  CString   filemsg;  
  filemsg.Format("FIL%d:%d:",m_SendForm.m_DK,m_SendForm.m_FileSize);  
  filemsg+=m_SendForm.m_FileName;  
  p->SSock->Send(filemsg,filemsg.GetLength());  
  m_SendForm.Create(IDD_SENDFILEFORM_DIALOG);  
  m_SendForm.ShowWindow(SW_SHOW);  
   
  打开非模式对话框后我的代码出错  
                                        ReadSize=m_SendFile->Read(buf,BUFSIZE);  
   
  问题点数:100、回复次数:7Top

1 楼bohut(●伯虎● )回复于 2004-12-03 15:51:26 得分 20

为buf申请了内存控件了没有?Top

2 楼wsw1978(wsw1978)回复于 2004-12-03 15:51:43 得分 0

如果将下面的代码      
          m_SendForm.Create(IDD_SENDFILEFORM_DIALOG);  
          m_SendForm.ShowWindow(SW_SHOW);  
  改为m_SendForm.DoModal();  
  就没问题请教高手Top

3 楼wsw1978(wsw1978)回复于 2004-12-03 15:53:46 得分 0

当然有UCHAR   buf[BUFSIZE]={0};Top

4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 15:57:58 得分 0

?  
  把代码发到我的邮箱:  
  DentistryDoctor@msn.com  
  ?Top

5 楼wsw1978(wsw1978)回复于 2004-12-03 16:10:36 得分 0

窗体中创建非模式对话框                    
                    CFile   sfile(filename,CFile::modeRead|CFile::typeBinary);  
                    SendFileForm     m_SendForm;  
  m_SendForm.m_FileName=sfile.GetFileName();//取得文件名  
  m_SendForm.m_FileSize=sfile.GetLength();//取得文件大小  
  m_SendForm.m_DK=12000;//确定端口  
  m_SendForm.pos=0;  
  m_SendForm.m_SendFile=&sfile;//传递指针  
  CString   filemsg;  
  filemsg.Format("FIL%d:%d:",m_SendForm.m_DK,m_SendForm.m_FileSize);  
  filemsg+=m_SendForm.m_FileName;  
  p->SSock->Send(filemsg,filemsg.GetLength());  
  m_SendForm.Create(IDD_SENDFILEFORM_DIALOG);  
  m_SendForm.ShowWindow(SW_SHOW);  
  非模式对话框中的代码  
                    UCHAR   buf[BUFSIZE]={0};  
  long   ReadSize=0;  
  ReadSize=m_SendFile->Read(buf,BUFSIZE);//这一行出错  
   
  如果将下面的代码      
          m_SendForm.Create(IDD_SENDFILEFORM_DIALOG);  
          m_SendForm.ShowWindow(SW_SHOW);  
  改为模式对话框m_SendForm.DoModal();对话框中的代码不变就不出错  
  不知道说清楚没有,有什么不清楚请指出来.  
  请大家指点一下  
  Top

6 楼danyueer(淡月儿:从此以后,各人得各人的眼泪罢了)回复于 2004-12-03 16:14:03 得分 80

解析一下你的代码:  
   
  CFile   sfile(filename,CFile::modeRead|CFile::typeBinary);   //   CFile   sfile生命周期开始  
  ……  
  m_SendForm.ShowWindow(SW_SHOW);  
   
  当创建非模态对话框的函数结束以后,sfile就会被销毁,此时对话框仍然存在,其中仍然引用文件指针,而事实上这个文件对象已经不存在了,所以造成错误。  
  解决的办法一是用模态对话框,二是把sfile作为主对话框类的成员变量。  
  Top

7 楼wsw1978(wsw1978)回复于 2004-12-03 16:29:58 得分 0

谢谢,确实是sfile的生命周期的问题Top

相关问题

  • 文件夹对话框创建以后如何读取数据?
  • 读取.INI文件出错
  • 文件对话框
  • 为什么读取文件会出错?
  • 读取文件出错,帮解决!
  • JDOM读取SVG文件时出错...
  • 读取文本文件出错?
  • 文件夹对话框?
  • 文件夹的对话框
  • 关于文件对话框

关键词

  • 文件
  • 指针
  • 模式
  • 代码
  • sendform
  • 对话框
  • filemsg
  • sfile
  • sendfileform
  • 非模式

得分解答快速导航

  • 帖主:wsw1978
  • bohut
  • danyueer

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo