2013-10-21 33 views
0

我想在MSDN上按照本教程:Creating Named Shared MemoryCreateFileMapping()返回null

不幸的是,我從CreateFileMapping()得到NULL。文件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; 
    } 
    ... 
} 
+2

你應該先'的CreateFile()'來得到一個處理你的文件,然後使用文件句柄調用'CreateFileMapping()'作爲第一個參數。並確保你正在調用正確版本的函數(對於ANSI字符串''CreateFileMappingA()'或對於寬字符串''CreateFileMappingW()')。 – Chen

回答

4

現在,你告訴CreateFileMapping創建頁面文件的映射,然後使用您現有的文件名作爲文件映射的名稱。

您給文件映射對象的名稱可以有local\global\作爲前綴,但不能包含任何其他反斜線。

如果你想你的預先存在的文件映射爲一個共享內存區域,你會做什麼這個一般順序:

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

HANDLE file = CreateFile(szName, ...); 
HANDLE mapping = CreateFileMapping(file, ..., szMapName);