Windows CE下使用共享内存实现进程间数据交换
2015-12-28 11:03
471 查看
From: http://www.cnblogs.com/carlward/archive/2008/05/26/1207230.html
很多项目需要有多个独立的程序共同工作,在这些程序之间交换数据,比较方便的方法之一就是使用共享内存。
和在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); // FILE_MAP_ALL_ACCESS
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来访问这段共享内存。实现了内存的跨进程共享。更进一步的,可以通过互发消息的方式来在两个程序之间互相通知对方对数据的改变。
很多项目需要有多个独立的程序共同工作,在这些程序之间交换数据,比较方便的方法之一就是使用共享内存。
和在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); // FILE_MAP_ALL_ACCESS
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来访问这段共享内存。实现了内存的跨进程共享。更进一步的,可以通过互发消息的方式来在两个程序之间互相通知对方对数据的改变。
相关文章推荐
- cocos2d-x 3.9版本使用Scale9Sprite的头文件设置
- 惠普中国CEO孙振耀退休感言---阿冬专栏
- C#基础精华07(委托事件,委托的使用,匿名方法)
- 海思SDK包中make menuconfig的记录
- C#基础精华07(委托事件,委托的使用,匿名方法)
- 楼栋查询
- 调用Newtonsoft.Json 报FileNotFoundException 错误
- 注意你的注释,尽量让代码自己说话吧
- NoSql之redis学习(二)
- C语言可变参数函数的使用方法讲解
- static修饰变量
- C语言中可变参数的用法
- 最短路径之Dijkstra算法
- Leetcode: Sparse Matrix Multiplication
- 非类型模版参数
- objective-c数组的四种遍历方法总结
- C实现与 uint64_t 相同功能的类
- C语言还有不定参数
- Title_微信开放平台分账功能实战(Java版)
- NLPIR.user Not valid license or your license expired! 解决办法