【发布时间】:2013-01-22 22:00:14
【问题描述】:
我有一个应用程序,它有一个使用CreateFileMapping 定义的共享内存区域,我正在尝试从另一个应用程序读取该内存。
我试过了:
handle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
0,$3200, pchar('FileMappingZone'));
但我明白了:
当文件已存在时无法创建该文件
可能是什么问题?
【问题讨论】:
-
您的 winapi 调用包装器是否在每次调用后无条件检查
GetLastError?CreateFileMapping应该返回一个有效的句柄和,下面的GetLastError会返回ERROR_ALREADY_EXISTS(如果它是你所期望的,这实际上不是一个错误)。 -
我在调用 CreateFileMapping 之后调用 GetLastError,如果我在它说:操作成功完成之前关闭了已创建文件映射的应用程序
-
@opc0de 不要那样做。仅当文档要求这样做时才调用
GetLastError。那是CreateFileMapping返回NULL的时候。 -
@DavidHeffernan
GetLastError有时应该在非错误情况下进行检查,这与errno不同。但重要的是不将其值解释为错误。
标签: delphi winapi shared-memory