2013-10-21 5 views
0

MSDN의 자습서 (Creating Named Shared Memory)를 따르려고합니다.CreateFileMapping()이 null을 반환합니다.

불행히도 NULLCreateFileMapping()입니다. 파일 shmfile.txt이 내 파일 시스템에 있으므로 문제가 발생하지 않아도 매핑이 만들어지고 파일이 공유 메모리 개체로 사용됩니다.

내가 뭘 잘못하고 있니? 그런 다음, 페이지 파일의 매핑을 만들 파일 매핑의 이름으로 기존 파일의 이름을 사용하는 CreateFileMapping을 이야기하고, 지금

... 
#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; 
    } 
    ... 
} 
+2

먼저'를 CreateFile()는'에 대한 핸들을 얻을해야 당신의 파일을 만든 다음 파일 핸들을 첫 번째 매개 변수로 사용하여'CreateFileMapping()'을 호출하십시오. 그리고 ANSI 문자열은 올바른 함수 버전 (CreateFileMappingA(), 넓은 문자열은'CreateFileMappingW()')을 호출해야합니다. – Chen

답변

4

:

이 내 코드입니다.

파일 매핑 개체에 지정한 이름은 접두사로 local\ 또는 global\ 일 수 있지만 다른 백 슬래시는 사용할 수 없습니다. 당신이 공유 메모리 영역로 기존 파일을 매핑 할 경우

,이 일반적인 순서에 뭔가를 할 거라고 :

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

HANDLE file = CreateFile(szName, ...); 
HANDLE mapping = CreateFileMapping(file, ..., szMapName); 
관련 문제