- m_hFile = CreateFileForMapping(wcsBuf/*文件地址*/, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |FILE_FLAG_RANDOM_ACCESS,0);
-
- if (m_hFile == INVALID_HANDLE_VALUE)
- {
- return false;
- }
- // 创建文件映射对象
- m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);
- if ((m_hFileMap == NULL) || GetLastError() != ERROR_ALREADY_EXISTS)
- {
- [color=#FF0000]LOG_ERROR("Create File Mapping fail !");[/color]
- return false;
- }
以上是一段非常简单的创建文件映射的代码,在WIN32下调试,没有问题。可是每次在PND的WINCE下运行就会出问题,每次都是"Create File Mapping fail !",很是惆怅啊!请教大家,如何处理?
不怕大家笑话,本人刚刚学习编程,属于一级菜鸟。所以请大家尽可能的详细讲解,感激不尽!
另外,你可以参考CreateFileMapping(SC_CreateFileMapping)的代码:
http://www.2beanet.com/wince/src/COREOS/NK/KERNEL/MAPFILE.C.html
http://www.2beanet.com/wince/src/COREOS/NK/KERNEL/MAPFILE.C.html
牛X,,晕了~~呵
解决了!
- //映射文件大小
- DWORD iFileSizeHigh = 0;
- DWORD iFileSizeLow = 0;
- #ifdef OS_WINCE
- m_hFile = CreateFileForMapping(wcsBuf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |FILE_FLAG_RANDOM_ACCESS,0);
- //取文件大小
- iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);
- #else
- m_hFile = CreateFile(wcsBuf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- //取文件大小
- iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);
- #endif
-
- if (m_hFile == INVALID_HANDLE_VALUE)
- {
- LOG_ERROR("OpenFile : CreateFile fail !");
- return false;
- }
- // 创建文件映射对象
- m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, iFileSizeHigh, iFileSizeLow, NULL);
在WIN32里面iFileSizeHigh和iFileSizeLow可以为0.CE里面貌似不可以!
文件大小无变化还是100多M
CE里这两个值是可以为0的,只不过为0表示将文件整个都map,你文件这么大当然map不了,现在你不设为0,那么就只是map部分,那就可以了。
//取文件大小
iFileSizeLow = GetFileSize(m_hFile, &iFileSizeHigh);
也是整个文件mapping
HANDLE CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
);
MSDN上面不是说第二个参数要设置为NULL么?
lpFileMappingAttributes
[in] Ignored. Must be NULL.