我有一个应用程序,它有一个用 CreateFileMapping
定义的共享内存区域,我正在尝试从另一个应用程序读取该内存。
我尝试了这个:
handle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
0,$3200, pchar('FileMappingZone'));
但我得到:
可能是什么问题呢?
最佳答案
并非所有将GetLastError()
值设置为不成功的东西都是错误。首先通过函数的返回值区分错误很重要,然后检查 GetLastError()
以获取有关发生的错误类型的更多信息。
对于已经存在的映射, CreateFileMapping
被记录为返回一个有效的句柄并将 GetLastError()
值设置为 ERROR_ALREADY_EXISTS
。在这种情况下,错误值是信息性的:如果您对打开映射之前是否存在感兴趣,则检查它是有效的,但这不是错误。您可以通过测试返回值是否为 NULL 来检测失败。否则,您只需继续使用 handle 即可。
附言如果您想在打开之前确保该部分存在,您可以使用 OpenFileMapping
,它会为不存在的部分失败,而不是创建一个新的部分。
关于delphi - 为什么 CreateFileMapping 返回 "file already exists"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14750511/