我要初现的功能是:
客户端A到将其收到的数据提供给另一客户端软件B,
初步的想法是:建立一个DLL,在这DLL中创建映射文件,客户端调用这个DLL往这映射文件写数据。而要让B能从出查找数据。
但在具体的实现上,没啥头绪,现请教各位大虾们

解决方案 »

  1.   

    可以直接使用的共享内存的类代码:
    http://blog.csdn.net/fengrx/archive/2009/04/13/4069088.aspx
      

  2.   

    看是什么数据了。按原理说,虽然是同一个DLL,但是加载进虚存的是DLL的一个复制拷贝共享数据可以用来通信
      

  3.   

    绝对不是同一DLL,两进程分别加载了两DLL的副本。其实你的意思用DLL的话,就不必要再用共享内存了。
    共享内存和DLL是实现进程间通信的两种方式。
    你查查使用DLL通信的文章。
    不过,提示你下,我的博客里有篇文章详细的讲了进程间通信的各种方法。其中,使用DLL通信还提供了一段关键的代码。
      

  4.   

    http://www.pudn.com/downloads30/sourcecode/windows/system/detail99328.html
      

  5.   

    http://www.pudn.com/downloads30/sourcecode/windows/system/detail99328.html
    我不能下载呀能传给我一份吗?
    [email protected]
      

  6.   

    //使用内存映射文件(CreateFileMapping) 读取数据
    //写数据  "DataCHARGE"为内存映射文件名, 在读数据时所用的内存映射文件名应与之一致。
    HANDLE hRecvMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
    PAGE_READWRITE | SEC_COMMIT, 0, LENCHARGE, "DataCHARGE");if (hRecvMap != NULL)      // STUDENT* 结构体
    {
      STUDENT* lpData = (STUDENT*)MapViewOfFile(hRecvMap, FILE_MAP_WRITE, 0, 0, 0);
      if (lpData == NULL)
      {
        CloseHandle(hRecvMap);
        hRecvMap = NULL;
    }//写入数据  此处 pCharge 结构体对象, 在执行此操作前应将你的数据值写入pCharge.
    *lpData = pCharge;
    UnmapViewOfFile(lpData);
    lpData = NULL;//CloseHandle(hRecvMap); //退出程序时执行
    ///hRecvMap = NULL;
    }//读数据      此处"DataCHARGE"为映射文件名, 与CreateFileMapping时的文件名一致
    HANDLE m_hReceiveMap = OpenFileMapping(FILE_MAP_READ, TRUE, "DataCHARGE");if (m_hReceiveMap != NULL)  // STUDENT* 为结构体
    {
      STUDENT* lpData=(STUDENT*)MapViewOfFile(m_hReceiveMap, FILE_MAP_READ, 0, 0, 0);  if (lpData == NULL)  //读出数据
      {
        CloseHandle(m_hReceiveMap);
        m_hReceiveMap = NULL;
      }  //如果执行到此处, 说明数据已经读取成功。 可在此处输入 lpData 的值测试一下。
      CloseHandle(m_hReceiveMap);