using System; using System.IO.MemoryMappedFiles; namespace BizHawk.Common { public unsafe class SharedMemoryBlock : IDisposable { public string Name; public string BlockName; public int Size; public MemoryMappedFile mmf; public MemoryMappedViewAccessor mmva; public byte* Ptr; public void Allocate() { //we can't allocate 0 bytes here.. so just allocate 1 byte here if 0 was requested. it should be OK, and we dont have to handle cases where blocks havent been allocated int sizeToAlloc = Size; if (sizeToAlloc == 0) sizeToAlloc = 1; mmf = MemoryMappedFile.CreateNew(BlockName, sizeToAlloc); mmva = mmf.CreateViewAccessor(); mmva.SafeMemoryMappedViewHandle.AcquirePointer(ref Ptr); } public void Dispose() { if (mmf == null) return; mmva.Dispose(); mmf.Dispose(); mmf = null; } } }