代码比较少,直接贴代码。发送端和接收端的代码基本相同。
发送端
// ShareMemory_Send.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <WINDOWS.H>
BOOL Send()
{
//创建FileMapping对象
HANDLE hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared"));
if (NULL == hMapObject)
{
printf("创建文件映像失败\n");
return FALSE;
}
//将FileMapping对象映射到自己的进程
HANDLE hMapView = MapViewOfFile(hMapObject,FILE_MAP_WRITE,0,0,0);
if (NULL == hMapView)
{
printf("内存映射失败\n");
return FALSE;
}
//写入数据
memset((char*)hMapView,0,0x1000);
strcpy((char*)hMapView,"Test shared memory.");
return TRUE;
}
int main(int argc, char* argv[])
{
Send();
return 0;
}
接收端
// ShareMemory_Recv.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
BOOL Recv()
{
//创建FileMapping对象
HANDLE hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared"));
if (NULL == hMapObject)
{
printf("共享内存失败\n");
return FALSE;
}
//将FileMapping对象映射到自己的进程
HANDLE hMapView = MapViewOfFile(hMapObject,FILE_MAP_WRITE,0,0,0);
if (NULL == hMapView)
{
printf("内存映射失败\n");
return FALSE;
}
//读取数据
char szBuffer[0x1000] = {0};
memcpy(szBuffer,hMapView,0x1000);
printf("%s\n",szBuffer);
return TRUE;
}
int main(int argc, char* argv[])
{
Recv();
return 0;
}
运行结果
先让发送端程序跑起来,不要结束,否则FileMapping会被释放。
然后运行接收端打印数据
---------------------
作者:hambaga
来源:CSDN
原文:https://blog.csdn.net/Kwansy/article/details/108075426
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件