天天看点

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

李国帅 编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); //取消本进程地址空间的映射:      

程序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); //取消本进程地址空间的映射:      

继续阅读