8

で定義された共有メモリゾーンを持つアプリケーションがあり、CreateFileMapping別のアプリケーションからそのメモリを読み取ろうとしています。

私はこれを試しました:

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

しかし、私は得ます:

そのファイルがすでに存在する場合、ファイルを作成できません

何が問題なのですか?

4

1 に答える 1

16

GetLastError()値を不成功に設定するすべてがエラーであるとは限りません。最初に関数の戻り値でエラーを区別し、発生したエラーの種類GetLastError()に関する詳細情報を取得するために調べることが重要です。

すでに存在するマッピングについては、有効なハンドルCreateFileMapping返し、値をに設定するように文書化されています。この場合、エラー値は情報です。マッピングを開く前にマッピングが存在していたかどうかに関心があるかどうかを調べることは有効ですが、エラーではありません。戻り値がNULLであるかどうかをテストすることにより、失敗を検出します。それ以外の場合は、先に進んでハンドルを使用します。GetLastError()ERROR_ALREADY_EXISTS

PS開く前にセクションが存在することを確認したい場合はOpenFileMapping、新しいセクションを作成する代わりに、存在しないセクションで失敗するセクションを使用できます。

于 2013-02-07T12:15:50.537 に答える