您的位置:首页 > 其它

VC进程间共享内存的实现步骤

2017-12-25 10:57 337 查看
李国帅 编2007年9月

程序1 -- 建立共享区:

HANDLE m_hMapFile=CreateFileMapping(  //创建一个有名的共享内存
(HANDLE)0xFFFFFFFF, //0xFFFFFFFF表示创建一个进程间共享的对象
NULL,
PAGE_READWRITE,  //读写共享
0,
0x1000,       //共享区间大小4096
_T("ShareName"));

void* m_pBaseMapFile=MapViewOfFile(  //映射到本进程的地址空间
m_hMapFile,
FILE_MAP_READ|FILE_MAP_WRITE,
0,
0,
0);

unsigned char *p=(unsigned char*)m_pBaseMapFile;   //使用共享区
p[0]=00;
p[1]=11;
p[2]=22;

system(("pause"));
UnmapViewOfFile(m_pBaseMapFile); //取消本进程地址空间的映射:
CloseHandle(m_hMapFile);

程序2 -- 使用共享区:

HANDLE m_hMapFile =OpenFileMapping( //获得共享内存句柄
FILE_MAP_WRITE,
FALSE,
_T("myfile"));

void *m_pBaseMapFile=MapViewOfFile( //映射到本进程的地址空间
m_hMapFile,
FILE_MAP_READ|FILE_MAP_WRITE,
0,
0,
0);
unsigned char *p=(unsigned char*)m_pBaseMapFile;
//      CString s;//      s.Format("%#x: %d, %d, %d",p,p[0],p[1],p[2]); AfxMessageBox(s);
wstring s;     std::ostringstream oss;
oss<<p<<p[0]<<p[1]<<p[2]<<_T("\n");s=oss.str();cout>>s;//使用共享区
p[0]=33;
p[1]=44;  //修改共享区

system(("pause"));
UnmapViewOfFile(m_pBaseMapFile); //取消本进程地址空间的映射:
CloseHandle(m_hMapFile);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: