创建命名共享内存

【勇芳软件工作室】汉化HomePreviousNext

第一个进程调用CreateFileMapping函数创建一个文件映射对象,并为其命名为MyFileMappingObject。通过使用PAGE_READWRITE标志,进程将通过创建的任何文件视图对内存具有读/写权限。

HANDLE hMapFile;

hMapFile = CreateFileMapping(hFile, //当前文件句柄。

NULL, //默认安全性

PAGE_READWRITE, //读/写权限

0, //最大对象大小。

0, // hFile的大小

"MyFileMappingObject"); //映射对象的名称。

if (hMapFile == NULL) {

ErrorHandler("Could not create file-mapping object.");

}

然后,进程将使用CreateFileMapping调用中CreateFileMapping返回的文件映射对象句柄来创建进程的地址空间中文件的视图。MapViewOfFile函数返回指向文件视图的指针。

LPVOID lpMapAddress;

lpMapAddress = MapViewOfFile(hMapFile, //处理映射对象。

FILE_MAP_ALL_ACCESS, //读/写权限

0, //最大对象大小。

0, // hFile的大小

0); //映射整个文件。

if (lpMapAddress == NULL) {

ErrorHandler("Could not map view of file.");

}

第二个进程使用名称MyFileMappingObject的OpenFileMapping函数调用与第一个进程相同的文件映射对象。像第一个进程一样,第二个进程使用MapViewOfFile函数获取指向文件视图的指针。

HANDLE hMapFile;

LPVOID lpMapAddress;

hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, //读/写权限

FALSE, //不要继承这个名字

"MyFileMappingObject"); //映射对象。

if (hMapFile == NULL) {

ErrorHandler("Could not open file-mapping object.");

}

lpMapAddress = MapViewOfFile(hMapFile, //处理映射对象。

FILE_MAP_ALL_ACCESS, //读/写权限

0, //最大对象大小。

0, // hFile的大小

0); //映射整个文件。

if (lpMapAddress == NULL) {

ErrorHandler("Could not map view of file.");

}