Windows操作系統下面利用C++語言進行內存共享程序的編寫

    創建共享內存分以下幾個步驟:

    1.定義共享內存的結構體;

    2.利用CreateFileMapping函數創建共享內存;

    3.定義指向共享內存結構體的指針pShareMem,利用MapViewOfFile函數將剛剛創建的內存映射到定義指針pShareMem。

    讀寫共享內存分以下幾個步驟:

    1.定義共享內存的結構體;

    2.用OpenFileMapping函數打開上面創建的共享內存區,該函數返回共享內存的地址;

    3.將共享內存映射爲文件指針;

    4.定義指向共享內存結構體的指針,將共享內存的內容拷貝到結構體指針裏。

HANDLE hMap;
HANDLE hAddress;
int iErrCode;

//第一步要定義所要共享的內容的結構體

typedef struct _TShareMem
{
    char Data[256];
}TShareMem;

void CreateMap()
{  
    CString strBuf;
    CString strShare = "共享內存";
    char szBuf[256];
    TShareMem* pShareMem;

    //創建共享內存,這個函數的最後一個參數即是創建的共享內存的名稱 

    hMap=::CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,sizeof(TShareMem),_T("NewMap"));

    if ( hMap == NULL )  
    {
        iErrCode = GetLastError();
        AfxMessageBox("不能創建內存映射文件!");
    }
    //寫共享內存區,將內存映射爲文件
    pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
    memcpy(pShareMem,strShare,strShare.GetLength());   
   

    //打開剛剛創建的共享內存區 
    hMap = ::OpenFileMapping( FILE_MAP_WRITE, false, _T("NewMap"));
    if (hMap == 0 )
    {
        iErrCode = GetLastError();
        AfxMessageBox("不能定位內存映射文件塊!");
    }

    //讀共享內存區 
    hAddress = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
    //pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); 
    
    if ( hAddress == NULL )
        AfxMessageBox("Can''t View Memory Map");
   
    memset(szBuf,0,sizeof(szBuf));

    //拷貝共享內存區的內容 
    CopyMemory(szBuf,hAddress,255);
    AfxMessageBox(szBuf);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章