现在的位置: 首页 > 综合 > 正文

关于进程或线程间通信(利用内存映射)vc++ 6.0

2013年09月05日 ⁄ 综合 ⁄ 共 1249字 ⁄ 字号 评论关闭

关于进程或线程间通信(利用内存映射)vc++ 6.0

  • 2008年12月14日 16:56amwscxk 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌

     

      struct   SData  
      {  
      int   m_name;  
      BOOL   m_data;  
      }; 

     

    写入内存映射内容代码

     int iLengByte=sizeof(SData);        
      LPBYTE lpData;        
      //创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式  
      HANDLE hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE|SEC_COMMIT,0,iLengByte,"S_DATA");        
      if (hMap!=NULL)        
      {        
      //将文件映射对象的全部或部分映射到进程地址空间  
      lpData =(LPBYTE)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);        
      if(lpData==NULL)        
      {        
      CloseHandle(hMap);        
      hMap =NULL;        
      return;        
      }        
      SData Data;        
      Data.m_name=6;
      Data.m_data=true;
      memcpy(lpData,(LPBYTE)(&Data),iLengByte);        
      }            

     

    读取内存映射内容代码

       SData data;        
      //打开内存映射文件  
      HANDLE m_hMap=OpenFileMapping(FILE_MAP_READ,FALSE,"S_DATA");        
      if (m_hMap==NULL) return;        
      //得到映射文件的地址  
      LPBYTE lpData=(LPBYTE)MapViewOfFile(m_hMap,FILE_MAP_READ,0,0,0);        
      if (lpData==NULL)        
      {        
      CloseHandle(m_hMap);            
      m_hMap=NULL;  
      return;        
      }          
      //得到映射文件中的数据  
      memcpy(&data,(SData*)(lpData),sizeof(SData));    
      int m_temp=data.m_name;
      BOOL m_temp1=data.m_data;
      CString ttt;
      ttt.Format("%d",m_temp);
      MessageBox(ttt);

     

    以上代码在VC++ 6.0中可以使用,现在我想把读取内存映射内容的代码改用vb代码。
    不知道该怎样写.希望可以回复vb代码.谢谢.

     

抱歉!评论已关闭.