VC中一个数组:
BYTE a[100];   //已经有值了,想通过内存映射发给另一个接收程序
中间是这么写的:
LPSTR lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); 
CString ss1[100];
for (int i=0;i<100;i++)
    ss1[i]=a[i];
sprintf(lpData, (LPSTR)ss1); 接收程序是这么写的:
LPSTR lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); 我是根据例程这么写的,试了一下,如果发送端发送的是string类型的字符串,那就没问题,接收程序收到的是正确的字符。可是发送的是BYTE型的数据就错误了,收到的和发送的数据对不上,我也试过用LPBYTE对LPSTR,但是没搞不定,我请求大家帮我看看应该怎么写,急着用啊~~~
主要是对LPBYTE,LPSTR不是很熟

解决方案 »

  1.   

    //将数据写到内存映射文件
    BYTE SaveOneFrameToImg[100];
    void CFileMapTransTxtDlg::OnWrite() 
    {
    //更新数据
    UpdateData(TRUE); //创建内存映像对象
    SaveOneFrameToImg[0]= 0x68;
    HANDLE hMapping;
    hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,"MYSHARE");   
    if(hMapping==NULL)   
    {   
    AfxMessageBox("CreateFileMapping() failed.");
    return;
    }
    //将文件的视图映射到一个进程的地址空间上,返回LPVOID类型的内存指针
    BYTE* lpbyte1=(BYTE*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    lpbyte1=&SaveOneFrameToImg[0] ;
    UnmapViewOfFile(lpbyte1);  //a.............运行完这句程序就自动结束了,其实0x68已经存到lpbyte1里了
    }//将数据从内存映射文件读出
    void CFileMapTransTxtDlg::OnRead() 
    {
    //创建内存映像对象
    HANDLE hMapping;
    hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE"); 
    if(hMapping==NULL) 

    AfxMessageBox("CreateFileMapping() failed.");
    return;
    }
    PBYTE lpbyte2=(PBYTE)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);// b............lpbyte2里没有任何数值
    UnmapViewOfFile(lpData1);
    }a,b两大问题,如果把a注释掉,程序就不会出错,但是b这就读不出任何数据,到底是哪里出错了???
      

  2.   

    内存文件映射之后,就可以当作指针用了。
    所以:
    LPBYTE lpData=(LPBYTE)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    CopyMemory(lpData, a, 100);
    这样就可以了。
    读出端也一样:
    LPBYTE lpData=(LPBYTE)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    lpData[...]这样就可以访问了。要注意的是,不要把指针和字符串混淆,字符串要求以0结尾。
    另外,创建内存映射文件的时候要保证大小。