急!急!急!!!!MFC中CFile类型的文件指针怎么作为参数传递到另一个函数中

maverik4177 2013-05-14 04:45:36
如题!望高手解答下!

比如在一个函数中有
CFile file(fileDlg.GetPathName(),CFile::modeRead)

另有一个函数定义
int MyRead(CFile file,int offset)
{
file.Seek(offset,CFile::begin);
...
}
而实际运行的时候总是出错!

我如何在主函数中使用这个函数?
...全文
372 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 8 楼 piaobotudou 的回复:
看一下 Call stack视图
还是很感谢你。关于指针的问题。你也说得对!
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 12 楼 nirvana_newbie 的回复:
你的cBuf交换语句错了。cBuf是指针,不可以这么做的。你把cBuf定义成数组吧。
找到原因了!!!是这儿: cBuf=(BYTE *)&pBuf; 应该写成: cBuf=(BYTE *)&pBuf[0]; 因为原意是要将pBuf缓存中的第一个数的地址assign给cBuf,原来的写法是把pBuf这个缓存的地址给cBuf了。所以交换出错了。 你说得还是很有道理的,谢谢啊!!!!
nirvana_newbie 2013-05-14
  • 打赏
  • 举报
回复
你的cBuf交换语句错了。cBuf是指针,不可以这么做的。你把cBuf定义成数组吧。
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 8 楼 piaobotudou 的回复:
看一下 Call stack视图

maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 7 楼 nirvana_newbie 的回复:
[quote=引用 6 楼 maverik4177 的回复:] [quote=引用 3 楼 nirvana_newbie 的回复:] 比如在一个函数中有 CFile file(fileDlg.GetPathName(),CFile::modeRead) 这是一个函数,还是函数体内的变量?如果是变量,你需要return这个file,再到MyRead函数中去调用。 如果file()是一个函数,我真不知道该怎么办了。
CFile是MFC里的封装的一个类吧。file是一个对象还是什么的。但我觉得应该像C++里面的FILE *fp一样可以把指针拿来传递呀。[/quote] 看了你的代码,明白你的意图了。你的类型不对,造成内存访问出错。 CFile类的Read方法原型: UINT Read(void *lpBuf,UINT nCount) 第一个参数是以字节为单位的数组,所以只适用于char或者unsigned char。 而你的参数是Long类型。 改一下类型char *pBuf=new char[20];试试。[/quote] 原文定义read: virtual UINT Read( void* lpBuf, UINT nCount ); Pointer to the user-supplied buffer that is to receive the data read from the file. 用户定义的缓冲都可以。
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 7 楼 nirvana_newbie 的回复:
[quote=引用 6 楼 maverik4177 的回复:] [quote=引用 3 楼 nirvana_newbie 的回复:] 比如在一个函数中有 CFile file(fileDlg.GetPathName(),CFile::modeRead) 这是一个函数,还是函数体内的变量?如果是变量,你需要return这个file,再到MyRead函数中去调用。 如果file()是一个函数,我真不知道该怎么办了。
CFile是MFC里的封装的一个类吧。file是一个对象还是什么的。但我觉得应该像C++里面的FILE *fp一样可以把指针拿来传递呀。[/quote] 看了你的代码,明白你的意图了。你的类型不对,造成内存访问出错。 CFile类的Read方法原型: UINT Read(void *lpBuf,UINT nCount) 第一个参数是以字节为单位的数组,所以只适用于char或者unsigned char。 而你的参数是Long类型。 改一下类型char *pBuf=new char[20];试试。[/quote] 应该不是这个问题,因为只要我不这样传递file,程序的其他部分没有任何问题。
微型蚂蚁 2013-05-14
  • 打赏
  • 举报
回复
看一下 Call stack视图
nirvana_newbie 2013-05-14
  • 打赏
  • 举报
回复
引用 6 楼 maverik4177 的回复:
[quote=引用 3 楼 nirvana_newbie 的回复:] 比如在一个函数中有 CFile file(fileDlg.GetPathName(),CFile::modeRead) 这是一个函数,还是函数体内的变量?如果是变量,你需要return这个file,再到MyRead函数中去调用。 如果file()是一个函数,我真不知道该怎么办了。
CFile是MFC里的封装的一个类吧。file是一个对象还是什么的。但我觉得应该像C++里面的FILE *fp一样可以把指针拿来传递呀。[/quote] 看了你的代码,明白你的意图了。你的类型不对,造成内存访问出错。 CFile类的Read方法原型: UINT Read(void *lpBuf,UINT nCount) 第一个参数是以字节为单位的数组,所以只适用于char或者unsigned char。 而你的参数是Long类型。 改一下类型char *pBuf=new char[20];试试。
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 3 楼 nirvana_newbie 的回复:
比如在一个函数中有 CFile file(fileDlg.GetPathName(),CFile::modeRead) 这是一个函数,还是函数体内的变量?如果是变量,你需要return这个file,再到MyRead函数中去调用。 如果file()是一个函数,我真不知道该怎么办了。
CFile是MFC里的封装的一个类吧。file是一个对象还是什么的。但我觉得应该像C++里面的FILE *fp一样可以把指针拿来传递呀。
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 4 楼 yudahai109 的回复:
2楼说的没错呀,你定义MyRead函数的时候,参数要用指针的呀,最好2个都要用,不然传递一个值过去。。。。


看吧,程序:

运行后,选择了要读取的文件后:
有新工作否 2013-05-14
  • 打赏
  • 举报
回复
2楼说的没错呀,你定义MyRead函数的时候,参数要用指针的呀,最好2个都要用,不然传递一个值过去。。。。
nirvana_newbie 2013-05-14
  • 打赏
  • 举报
回复
比如在一个函数中有 CFile file(fileDlg.GetPathName(),CFile::modeRead) 这是一个函数,还是函数体内的变量?如果是变量,你需要return这个file,再到MyRead函数中去调用。 如果file()是一个函数,我真不知道该怎么办了。
maverik4177 2013-05-14
  • 打赏
  • 举报
回复
引用 1 楼 piaobotudou 的回复:
int MyRead(CFile& file,int offset)
这种我也试过了。但是也不行。我不能将错误情况描述地很清楚。晚上回去我给你截个图看看看行么
微型蚂蚁 2013-05-14
  • 打赏
  • 举报
回复
int MyRead(CFile& file,int offset)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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