8

我有一个应用程序,它定义了一个共享内存区域CreateFileMapping,我正在尝试从另一个应用程序读取该内存。

我试过这个:

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

但我得到:

当该文件已存在时无法创建该文件

可能是什么问题呢?

4

1 回答 1

16

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

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

PS如果您想在打开之前确保该部分存在,您可以OpenFileMapping对不存在的部分使用 which will fail 而不是创建一个新的部分。

于 2013-02-07T12:15:50.537 回答