我们可以通过 CreateFileMapping
申请一块共享内存,并通过 MapViewOfFile
函数将共享内存对象映射进进程的内存空间,以实现进程间的消息通信。
BOOL CreateSharedMemory()
{
//创建FileMapping对象
hMapObject = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared"));
if(!hMapObject)
return FALSE;
//将FileMapping对象映射到自己的进程
lpszSharedBuff = MapViewOfFile(hMapObject,FILE_MAP_WRITE,0,0,0);
if(!lpszSharedBuff)
return FALSE;
sm = lpszSharedBuff;
sm->dwBuffMax = 0x100;
sm->lpszBuff = (LPSTR)((DWORD)lpszSharedBuff+12);
return TRUE;
}
BOOL Write(LPSTR lpszBuff, DWORD dwBuffLen)
{
if(sm->dwBuffMax < dwBuffLen)
return FALSE;
ZeroMemory(sm->lpszBuff, g_dwBuffMax);
memcpy(sm->lpszBuff, lpszBuff, dwBuffLen);
sm->dwBuffLen = dwBuffLen;
return TRUE;
}
DWORD Read(LPSTR lpszBuff, DWORD dwBuffLen)
{
if(dwBuffLen < sm->dwBuffLen)
return 0;
ZeroMemory(lpszBuff, dwBuffLen);
memcpy(lpszBuff, sm->lpszBuff, sm->dwBuffLen);
return sm->dwBuffLen;
}