很多项目需要有多个独立的程序共同工作,在这些程序之间交换数据,比较方便的方法之一就是使用共享内存。
和在Windows平台上类似,WinCE下也提供了一系列内存映射函数来实现共享内存的创建和访问。
假设有两个进程需要共享一段大小为4096字节的数据。
其中的一个进程要先创建这个共享内存区域
hMemoryMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 4096, L"DataMap");
if (hMemoryMap != NULL)
{
lpData = (LPBYTE)MapViewOfFile(hMemoryMap, FILE_MAP_WRITE, 0, 0, 0);
if (lpData == NULL)
{
CloseHandle(hMemoryMap);
hMemoryMap = NULL;
}
}
对lpData指针进行操作就可以读写这段共享内存的数据。
另外一个进程就可以依据"DataMap"这个名称来打开以及访问这段共享内存,注意Windows CE上是没有OpenFileMapping函数的。
m_hMemoryMap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4096,L"DataMap");
if (m_hMemoryMap == NULL)
{
AfxMessageBox(L"CreateFileMapping Failed!");
return;
}
m_lpbReceiveBuf = (LPBYTE)MapViewOfFile(m_hMemoryMap,FILE_MAP_READ,0,0,0);
if (m_lpbReceiveBuf == NULL)
{
CloseHandle(m_hMemoryMap);
m_hMemoryMap=NULL;
和在Windows平台上类似,WinCE下也提供了一系列内存映射函数来实现共享内存的创建和访问。
假设有两个进程需要共享一段大小为4096字节的数据。
其中的一个进程要先创建这个共享内存区域
hMemoryMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 4096, L"DataMap");
if (hMemoryMap != NULL)
{
lpData = (LPBYTE)MapViewOfFile(hMemoryMap, FILE_MAP_WRITE, 0, 0, 0);
if (lpData == NULL)
{
CloseHandle(hMemoryMap);
hMemoryMap = NULL;
}
}
对lpData指针进行操作就可以读写这段共享内存的数据。
另外一个进程就可以依据"DataMap"这个名称来打开以及访问这段共享内存,注意Windows CE上是没有OpenFileMapping函数的。
m_hMemoryMap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4096,L"DataMap");
if (m_hMemoryMap == NULL)
{
AfxMessageBox(L"CreateFileMapping Failed!");
return;
}
m_lpbReceiveBuf = (LPBYTE)MapViewOfFile(m_hMemoryMap,FILE_MAP_READ,0,0,0);
if (m_lpbReceiveBuf == NULL)
{
CloseHandle(m_hMemoryMap);
m_hMemoryMap=NULL;
AfxMessageBox(L"MapViewOfFile Failed!");
return;
}
这样,这个“客户”进程就可以通过m_kpbReceiveBuf来访问这段共享内存。实现了内存的跨进程共享。更进一步的,可以通过互发消息的方式来在两个程序之间互相通知对方对数据的改变。
附件为示例代码。http://download1.csdn.net/down3/20070612/12184443926.rar