6175|23

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【为了醒目】关于文件映射的问题!!! [复制链接]


  1.   m_hFile = CreateFileForMapping(wcsBuf/*文件地址*/, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |FILE_FLAG_RANDOM_ACCESS,0);
  2.   
  3.     if (m_hFile == INVALID_HANDLE_VALUE)
  4.     {
  5.         return false;
  6.     }
  7.     // 创建文件映射对象
  8.     m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);

  9.     if ((m_hFileMap == NULL) ||  GetLastError() != ERROR_ALREADY_EXISTS)
  10.     {
  11.         [color=#FF0000]LOG_ERROR("Create File Mapping fail !");[/color]
  12.         return false;
  13.     }
复制代码


以上是一段非常简单的创建文件映射的代码,在WIN32下调试,没有问题。可是每次在PND的WINCE下运行就会出问题,每次都是"Create File Mapping fail !",很是惆怅啊!请教大家,如何处理?

不怕大家笑话,本人刚刚学习编程,属于一级菜鸟。所以请大家尽可能的详细讲解,感激不尽!

最新回复

分配的虚拟内存应该不限制于32MB slot的大小,创建文件映射内存应该是位于0x4200 0000到0x7FFF FFFF这一段的共享区域中。 在WInCE 中。dwMaximumSizeLow 设为0,则会返回失败。而在桌面中,如果传入的文件大小不是为0,则可以设置dwMaximumSizeHigh和dwMaximumSizeLow 都为0,系统会以当前文件的大小创建。  详情 回复 发表于 2009-11-16 11:37
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
学习了
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用GetLastErr把错误号打出来看看
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
还有你是CE5还是CE6?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
注意API参数的不同意义.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

6
 
引用 2 楼 ruritanian 的回复:
用GetLastErr把错误号打出来看看

错误号:5
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 ruritanian 的回复:
还有你是CE5还是CE6?

CE4.2
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
文件大小多大?
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 ruritanian 的回复:
文件大小多大?

122M
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
太大了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
超过32M肯定有问题
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

12
 
另外,你可以参考CreateFileMapping(SC_CreateFileMapping)的代码:
http://www.2beanet.com/wince/src/COREOS/NK/KERNEL/MAPFILE.C.html
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
http://www.2beanet.com/wince/src/COREOS/NK/KERNEL/MAPFILE.C.html

牛X,,晕了~~呵
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

14
 
问题还存在
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

15
 
你现在文件多大?
还是同样的问题么?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
解决了!

  1.     //映射文件大小
  2.     DWORD iFileSizeHigh = 0;
  3.     DWORD iFileSizeLow  = 0;
  4. #ifdef OS_WINCE
  5.     m_hFile = CreateFileForMapping(wcsBuf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |FILE_FLAG_RANDOM_ACCESS,0);
  6.     //取文件大小
  7.     iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);
  8. #else
  9.     m_hFile = CreateFile(wcsBuf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  10.     //取文件大小
  11.     iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);
  12. #endif
  13.    
  14.     if (m_hFile == INVALID_HANDLE_VALUE)
  15.     {
  16.         LOG_ERROR("OpenFile : CreateFile fail !");
  17.         return false;
  18.     }
  19.     // 创建文件映射对象
  20.     m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, iFileSizeHigh, iFileSizeLow, NULL);
复制代码

在WIN32里面iFileSizeHigh和iFileSizeLow可以为0.CE里面貌似不可以!
文件大小无变化还是100多M
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
CE里这两个值是可以为0的,只不过为0表示将文件整个都map,你文件这么大当然map不了,现在你不设为0,那么就只是map部分,那就可以了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

18
 
//取文件大小
iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);

也是整个文件mapping
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

19
 
HANDLE CreateFileMapping(
  HANDLE hFile,
  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  DWORD flProtect,
  DWORD dwMaximumSizeHigh,
  DWORD dwMaximumSizeLow,
  LPCTSTR lpName
);

MSDN上面不是说第二个参数要设置为NULL么?
lpFileMappingAttributes
[in] Ignored. Must be NULL.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

20
 
第二个参数是设为NULL啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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