4.14 创建Mapping对象进行共享数据[注意]
说明
这里包含两个程序,名字可看文章标题和浏览器标题
第一个代码是第一个参数的,第二个代码是第二个程序的
效果图示两个程序先后执行的效果,先执行程序一,再执行程序二
效果
源码
#include
#include
#include
#define BUF_SIZE 256
LPTSTR szName = TEXT("SharedFileMappingObject");
LPTSTR szMsg = TEXT("这是另一个进程的信息");
int main(int argc, PCHAR argv[]){
HANDLE hMapFile;//文件映射句柄
LPTSTR pBuf;//共享数据缓冲区指针
//创建命名的文件映射,不代表硬盘上的文件
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, szName);
if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE){
printf("创建文件映射错误: %d\n", GetLastError());
return 1;
}
//创建视图
pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
printf("创建文件映射视图错误: %d\n", GetLastError());
return 2;
}
//将共享数据赋值到文件映射中,如果允许时输入了参数则使用参数
if (argc == 1){
CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
} else{
DWORD dwCopyLen = (strlen(argv[1])< BUF_SIZE) ? strlen(argv[1]) : BUF_SIZE;
CopyMemory((PVOID)pBuf, argv[1], dwCopyLen);
}
printf("运行程序,完成运行后,按任意键退出\n");
getchar();
//取消映射,退出
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}
源码
#include
#include
#define BUF_SIZE 256
TCHAR szName[] = TEXT("SharedFileMappingObject");//映射的名字要正确
int main(int argc, PCHAR argv[]){
HANDLE hMapFile;//映射对象句柄
LPTSTR pBuf;//字符串缓存指针
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);//打开文件映射对象
if (hMapFile == NULL){
printf("打开文件映射失败: %d\n", GetLastError());
return 1;
}
//映射
pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
printf("文件映射视图错误: %d\n", GetLastError());
return 2;
}
//弹出得到的共享数据
MessageBox(NULL, pBuf, TEXT("映射内容为"), MB_OK);
//取消映射,退出
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}