我有一个应用程序,它定义了一个共享内存区域CreateFileMapping
,我正在尝试从另一个应用程序读取该内存。
我试过这个:
handle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
0,$3200, pchar('FileMappingZone'));
但我得到:
当该文件已存在时无法创建该文件
可能是什么问题呢?
我有一个应用程序,它定义了一个共享内存区域CreateFileMapping
,我正在尝试从另一个应用程序读取该内存。
我试过这个:
handle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
0,$3200, pchar('FileMappingZone'));
但我得到:
当该文件已存在时无法创建该文件
可能是什么问题呢?
并非所有将GetLastError()
价值设置为不成功的东西都是错误的。首先通过函数的返回值区分错误GetLastError()
很重要,并检查以获取有关发生的错误类型的更多信息。
对于已经存在的映射,CreateFileMapping
记录为返回有效句柄并将GetLastError()
值设置为ERROR_ALREADY_EXISTS
. 在这种情况下,错误值是信息性的:如果您对打开它之前是否存在映射感兴趣,检查它是有效的,但这不是错误。您可以通过测试返回值是否为 NULL 来检测失败。否则,您只需继续使用手柄。
PS如果您想在打开之前确保该部分存在,您可以OpenFileMapping
对不存在的部分使用 which will fail 而不是创建一个新的部分。