Windows CE下使用共享内存实现进程间数据交换

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来访问这段共享内存。实现了内存的跨进程共享。更进一步的,可以通过互发消息的方式来在两个程序之间互相通知对方对数据的改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值