您的位置:首页 > 其它

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来访问这段共享内存。实现了内存的跨进程共享。更进一步的,可以通过互发消息的方式来在两个程序之间互相通知对方对数据的改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: