美文网首页
4.14 创建Mapping对象进行共享数据[注意]

4.14 创建Mapping对象进行共享数据[注意]

作者: f675b1a02698 | 来源:发表于2017-09-14 16:16 被阅读0次

    说明

    这里包含两个程序,名字可看文章标题和浏览器标题

    第一个代码是第一个参数的,第二个代码是第二个程序的

    效果图示两个程序先后执行的效果,先执行程序一,再执行程序二

    效果

    源码

    #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);

    }

    相关文章

      网友评论

          本文标题:4.14 创建Mapping对象进行共享数据[注意]

          本文链接:https://www.haomeiwen.com/subject/kegqsxtx.html