用内存地址映射你要指定的大小段啊,<br>var<br> FFileMode: Integer;<br> ProtectAttr: DWORD;<br> Access: LongInt;<br>begin<br> FFileMode := fmOpenReadWrite;<br> FFileHandle := FileOpen(FSourceFile,FFileMode);<br> if FFileHandle = INVALID_HANDLE_VALUE then<br> raise EMMError.Create('无法打开文件');<br> try<br> FFileSize := GetFileSize(FFileHandle,nil);<br> if FFileSize = 0 then<br> raise EMMError.Create('要打开的文件大小为零');<br><br> if FFileMode = fmOpenRead then<br> ProtectAttr := Page_ReadOnly<br> else<br> ProtectAttr := Page_ReadWrite;<br> //创建文件映射对象<br> FMapFileHandle := CreateFileMapping(FFileHandle,nil,ProtectAttr,0,FFileSize,nil);<br> if FMapFileHandle = 0 then<br> raise EMMError.Create('创建文件映射失败');<br> finally<br> CloseHandle(FFileHandle);<br> end;<br> try<br> if FFileMode = fmOpenRead then<br> Access := FILE_MAP_READ<br> else<br> Access := FILE_MAP_ALL_ACCESS;<br> //建立文件视图映射<br> FMapView := MapViewOfFile(FMapFileHandle,Access,0,0,0); //这可以指定映射大小<br> if FMapView = nil then<br> raise EMMError.Create('将文件映射到进程空间失败');<br> finally<br> CloseHandle(FMapFileHandle);<br> end;<br>end;<br>-------------------------------------<br>内存映射其实就是一个指针,你可以用地址+偏移量的方式获取啊