| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 773 人关注过本帖
标题:关于内存映射文件的使用问题!希望知道的朋友指点一下
只看楼主 加入收藏
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于内存映射文件的使用问题!希望知道的朋友指点一下
;步骤:建立或打开文件,完成映射,读写文件,关闭.
;------------------------------------------------------------------------------
        .const
szFileName    db    'Readme.txt',0
;------------------------------------------------------------------------------
        .code
_WriteFile    proc    _hWnd,_lpBuffer
        local    @hFile,@hMapFile,@lpMemory
        local    @dwFileSize:DWORD
        
        pushad
        invoke    CreateFile,addr szFileName,GENERIC_READ or GENERIC_WRITE,\
            FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_HIDDEN,NULL
        .if    eax == INVALID_HANDLE_VALUE
            invoke    MessageBox,_hWnd,NULL,NULL,MB_OK
            ret
        .endif
        mov    @hFile,eax
        ;获取文件长度
        invoke    GetFileSize,@hFile,NULL
        mov    @dwFileSize,eax
        
        invoke    CreateFileMapping,@hFile,NULL,PAGE_READWRITE,0,128*1024,NULL
;问题就出现在这个函数的第5个参数上,由于是建立新文件,如果此参为0,竟然无法创建对象;如果太大,如是1M以上,则今后竟然出现未知的读写错误!不知道朋友遇到过,给说下!
        .if    !eax
            invoke    MessageBox,_hWnd,NULL,NULL,MB_OK
            jmp    _Ret1
        .endif
        mov    @hMapFile,eax
        invoke    MapViewOfFile,eax,FILE_MAP_READ or FILE_MAP_WRITE,0,0,0
        .if    !eax
            invoke    MessageBox,_hWnd,NULL,NULL,MB_OK
            jmp    _Ret2
        .endif
        mov    @lpMemory,eax
        mov    edi,eax
        mov    esi,_lpBuffer
       ;文件字符数计数器清0
        xor    ecx,ecx
              @@:
              mov    al,[edi]
              ;检测是否处于字符串的末尾
              cmp    al,0
              je    @F
              inc    edi
              inc    ecx
              ;检测是否到了文件的末尾,;到了就不写文件,直接退出
              cmp    ecx,@dwFileSize-4
              jnb    _end
              jmp    @B
        
        @@:
        mov    al,[esi]
        ;检测待写字符串是否已读取完毕
        cmp    al,0
        je    @F
       ;写文件
        mov    [edi],al
        inc    esi
        inc    edi
        jmp    @B
        @@:
        _end:
        invoke    UnmapViewOfFile,@lpMemory
    _Ret2:
        invoke    CloseHandle,@hMapFile
    _Ret1:
        invoke    CloseHandle,@hFile
        popad
        ret
_WriteFile    endp
;------------------------------------------------------------------------------


[ 本帖最后由 ONEPROBLEM 于 2010-4-22 08:00 编辑 ]
搜索更多相关主题的帖子: 内存 文件 映射 朋友 
2010-04-22 07:54
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
内存映射文件可是常用到的呀,怎么没有朋友遇到过此类"异常"呢?
2010-04-24 08:15
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:14 
这东西俺就是没用过~~~~
2010-04-24 13:17
快速回复:关于内存映射文件的使用问题!希望知道的朋友指点一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024118 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved