急!急!急!!!!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);
...
}
而实际运行的时候总是出错!

我如何在主函数中使用这个函数?
...全文
187 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)
回复
相关推荐
发帖
C++ 语言
创建于2007-09-28

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-05-14 04:45
社区公告
暂无公告