hur.cn - 华软网

 热门搜索

MapViewOfFile的疑问!!!

  作者:未知    来源:网络    更新时间:2009/11/11
//创建一个名为MySharedMem的长度为4096字节的有名映照资料
    hMySharedMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,(DWORD)0x1000,"MySharedMem"); 
if(hMySharedMapFile == NULL)
{
AfxMessageBox("创建映照资料失利!");
return;     
}

//并映照缓存区视图:

SYSTEM_INFO sys_info;
GetSystemInfo(&sys_info);

DWORD dwAllocationGranularity = sys_info.dwAllocationGranularity;
DWORD offset = dwAllocationGranularity;

LPSTR A,B,C;


A = (LPSTR)MapViewOfFile(hMySharedMapFile,FILE_MAP_READ|FILE_MAP_WRITE,0,(DWORD)(0x0),2);

if(A == NULL)  
{
AfxMessageBox("映照缓冲区视图失利!");
return;    
}

memset(A,'A',1); 

B = (LPSTR)MapViewOfFile(hMySharedMapFile,FILE_MAP_READ|FILE_MAP_WRITE,0,(DWORD)(offset & 0x100),2);

if(B == NULL)  
{
AfxMessageBox("映照缓冲区视图失利!");
return;    
}

memset(B,'B',1); 


C = (LPSTR)MapViewOfFile(hMySharedMapFile,FILE_MAP_READ|FILE_MAP_WRITE,0,(DWORD)(offset*2 & 0x500),2);

if(C == NULL)  
{
AfxMessageBox("映照缓冲区视图失利!");
return;    
}

memset(C,'C',1); 

CloseHandle(hMySharedMapFile);

AfxMessageBox(A);
AfxMessageBox(B);
AfxMessageBox(C);
为什么最后messagebox 显示的都是‘C’? 
 

---华软 网友回答---
它们映照统一块地址
---华软网友回复---
才0x1000的巨细,干嘛还要设置MapViewOfFile中的高地址?
只需修改低地址就好了,这样把A,B,C映照到不同的地址中。
---华软网友回复---
  class="deleted_message"> 该回复于2009-11-11 18:00:56被版主删除
---华软网友回复---
MapViewOfFile里面有两个参数dwFileOffsetHigh,dwFileOffsetLow。dwFileOffsetHigh是高32位,dwFileOffsetLow是低32位,他们两连接起来必需是dwAllocationGranularity的整数倍,你把(offset & 0x100)改成offset,(offset*2 & 0x500)改成2*offset就好了。
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。