加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么CreateFileMapping返回“文件已经存在”?

发布时间:2020-12-15 04:09:52 所属栏目:大数据 来源:网络整理
导读:我有一个应用程序,它有一个使用CreateFileMapping定义的共享内存区域,我试图从另一个应用程序读取该内存. 我试过这个: handle := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,$3200,pchar('FileMappingZone')); 但我得到: Cannot create a file when
我有一个应用程序,它有一个使用CreateFileMapping定义的共享内存区域,我试图从另一个应用程序读取该内存.

我试过这个:

handle := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,$3200,pchar('FileMappingZone'));

但我得到:

Cannot create a file when that file already exists

可能是什么问题呢?

解决方法

并非将GetLastError()值设置为非成功的所有内容都是错误的.首先通过函数的返回值区分错误很重要,并检查GetLastError()以获取有关发生的错误类型的更多信息.

对于已存在的映射,记录CreateFileMapping以返回有效句柄并将GetLastError()值设置为ERROR_ALREADY_EXISTS.在这种情况下,错误值是信息性的:如果您在打开映射之前对映射是否存在感兴趣,则检查它是有效的,但这不是错误.您通过测试返回值为NULL来检测故障.否则你只需继续使用手柄.

附:如果要在打开之前确保该部分存在,则可以使用OpenFileMapping,对于不存在的部分而言,这将失败,而不是创建新的部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读