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不是很熟
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不是很熟
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这就读不出任何数据,到底是哪里出错了???
所以:
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结尾。
另外,创建内存映射文件的时候要保证大小。