創建共享內存分以下幾個步驟:
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);
}