天天看點

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

繼續閱讀