現在、ファイルマップを使用してプロセス間通信をテストしようとしています。私がプロデューサーと呼ぶ最初のプログラムは、次のようにファイルマップを作成して書き込む次のコードでエラーが発生しません。
hEvent = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
256, // maximum object size (low-order DWORD)
TEXT("hEvent"));
if (hEvent == NULL)
{
MessageBox(NULL, TEXT("error: cannot create file map"), TEXT("gotit"), MB_OK);
_tprintf(TEXT("Could not create file mapping object (%d).\n"),
GetLastError());
return 1;
}
mapBuffer = (LPTSTR) MapViewOfFile(hEvent, FILE_MAP_ALL_ACCESS, NULL, NULL, 256);
if (mapBuffer == NULL)
{
MessageBox(NULL, TEXT("error: cannot view map"), TEXT("gotit"), MB_OK);
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hEvent);
return 1;
}
CopyMemory((PVOID)mapBuffer, teststring, 256);
_getch();
UnmapViewOfFile(mapBuffer);
CloseHandle(hEvent);
ただし、2番目のプロセスを模倣している2番目のプログラムでは、次のコードを使用して、このファイルマップを再度開こうとすると、コンシューマーにエラーが発生します。
hEvent = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, TEXT("hEvent"));
if (hEvent == NULL)
{
MessageBox(NULL, TEXT("error opening filemap"), TEXT("gotit"), MB_OK);
GetLastError();
return 1;
}
それが私の頭の上をまっすぐに進んでいるので、誰かが私が欠けている明らかなものを見ることができますか?