内存映射数据交换

//将数据写到内存映射文件
void CFileMapTransTxtDlg::OnWrite() 
{
    //更新数据
    UpdateData(TRUE);
    //创建内存映像对象
    HANDLE hMapping;   
    LPSTR lpData;   
    hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");   
    if(hMapping==NULL)   
    {   
        AfxMessageBox("CreateFileMapping() failed.");
        return;
    }

    //将文件的视图映射到一个进程的地址空间上,返回LPVOID类型的内存指针
    lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);   
    if(lpData==NULL)   
    {   
        AfxMessageBox("MapViewOfFile() failed.");
        return;
    }

    //给这段映像内存写数据
    sprintf(lpData,m_strSource);   

    //释放映像内存
    UnmapViewOfFile(lpData);   
}
//将数据从内存映射文件读出
void CFileMapTransTxtDlg::OnRead() 
{
    //创建内存映像对象
    HANDLE hMapping; 
    LPSTR lpData; 
    hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE"); 
    if(hMapping==NULL) 
    { 
        AfxMessageBox("CreateFileMapping() failed.");
        return;
    }

    //将文件的视图映射到一个进程的地址空间上,返回LPVOID类型的内存指针
    lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); 
    if(lpData==NULL) 
    {
        AfxMessageBox("MapViewOfFile() failed.");
        return;
    }
    //给这段映像内存的数据赋给本地变量
    m_strDest.Format("%s",lpData);

    //释放映像内存
    UnmapViewOfFile(lpData);

    //更新数据
    UpdateData(FALSE);
}

你可能感兴趣的:(内存映射数据交换)