两个进程通信,进程1有个函数是void fun(int* p),其中p是out输出的。
进程1把进程1中p的地址发送给进程2。
进程2得到地址后改变这个地址的值。问题到了:
我就想实现进程2改变的这个值,进程1可以得到。也就是进程1和进程2用了同样的逻辑地址和物理地址。能实现吗?
下面的可以吗,应该不行,有方法吗
 HANDLE   hFileMap;      
         hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0, ShareMemory,MAP_FILE_NAME );   
         if ( hFileMap == NULL )    
              return;   
         LPVOID   lpMap;
         lpMap = MapViewOfFile( hFileMap,FILE_MAP_ALL_ACCESS,0, 0,ShareMemory );
         if ( lpMap == NULL ) 
         {   
              CloseHandle( hFileMap );      
              return;   
         }   
         memset( lpMap, 0, ShareMemory );   
         SHARE_DATA * pData = (SHARE_DATA*)lpMap;   
         pData->time=1;
         lstrcpy( LPTSTR(pData->str), "Map Suc!!!" );

解决方案 »

  1.   

    这是不行的。
    指针指向的地址只是在进程1中有效,在进程2种是无效的,进程1的指针到了进程2中是不能用的。
    如果要改变的话,只能是进程2把数据拷贝到共享内存中,进程1取出后自行改变pData 
      

  2.   

    使用共享数据段的话,是可以做到LZ想要的效果的。
    问下,LZ是想做跨进程通信么?
    那样的话,不一定非得用共享数据段哦,使用DDE和利用剪切板应该也能实现。相对来说剪切板最简单一些(相对的,可能对用户操作产生一定影响)。
    不过共享数据段也不太难搞啦。
    DDE没用过,没有发言权。
      

  3.   


    有方法,假设AB两程序,A有数据100Byte给B
    1。a找b
    2。在a里用b的句柄virtualMallocEx一块空间,写进去数据
    3。用b的句柄给b发消息,把申请空间的地址传给b
    4。b获得地址和长度后,自己读自己内存就得到数据了
      

  4.   

        不好意思,我之前没做过那么复杂的跨进程通信,我只实现过一般数据的通信,string,int,double之类的。所以无法解答你的问题。
      

  5.   

    楼主其实找对了函数,CreateFileMapping是可以达到你的目的。
    只不过你没有深层次的看CreateFileMapping的用法,楼主,你看看MSDN对于CreateFileMapping的详细说明,说明的最下面有代码例子,名字是Creating Named Shared Memory。这个例子正好就是你想要的
      

  6.   

    你也可以到我的博客里面看看,也有详细的说明,
    http://perfecter.blog.xdnice.com
    抱歉,上班的时候只能上CSDN这些网站,不能给你找具体的页面链接
      

  7.   


    大哥你很强悍啊,但是进程a其实是dll,而进程b是服务,而调用dll的客户的应用程序,这个句柄我们不好获得啊
      

  8.   

    1、共享数据中,不要使用指针;2、共享的是数据,不是函数指针,不是共享函数;3、可以考虑使用 event 等信号量进行互相通讯知道数据被修改;
      

  9.   

    http://msdn.microsoft.com/en-us/library/aa366551(v=VS.85).aspx