1

私は MSDN のこのチュートリアルに従おうとしています: Making Named Shared Memory

残念ながら、私はから取得NULLCreateFileMapping()ます。ファイルshmfile.txtはファイル システムに存在するため、問題は発生せず、マッピングが作成され、ファイルが共有メモリ オブジェクトとしての役割を担うと考えました。

私は何を間違っていますか?

これは私のコードです:

...
#define BUF_SIZE 256
TCHAR szName[]=TEXT("C:\\Users\\joe\\shmfolder\\shmfile.txt"); 
int main(){
    HANDLE hMapFile; // filehandle
LPCTSTR pBuf; 
hMapFile = CreateFileMapping(
    INVALID_HANDLE_VALUE,    // use paging file
    NULL,                    // default security
    PAGE_READWRITE,          // read/write access
    0,                       // maximum object size (high-order DWORD)
    BUF_SIZE,                // maximum object size (low-order DWORD)
    szName);                 // name of mapping object

if (hMapFile == NULL)
{
    _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError());
    return 1;
    }
    ...
}
4

1 に答える 1

5

CreateFileMappingここでは、ページ ファイルにマッピングを作成し、既存のファイルの名前をファイル マッピングの名前として使用するように指示しています。

ファイル マッピング オブジェクトに付ける名前には、プレフィックスとしてlocal\orglobal\を付けることができますが、他のバックスラッシュを含めることはできません。

既存のファイルを共有メモリ領域としてマップする場合は、次の一般的な順序で何かを行います。

TCHAR szName[]=TEXT("C:\\Users\\joe\\shmfolder\\shmfile.txt"); 
TCHAR szMapName[]=TEXT("SharedFile"); 

HANDLE file = CreateFile(szName, ...);
HANDLE mapping = CreateFileMapping(file, ..., szMapName);
于 2013-10-21T15:53:09.357 に答える