public MidiBuffer(int dwSize)
{
length = dwSize;
Data = new byte[dwSize];
dataHandle = GCHandle.Alloc(Data, GCHandleType.Pinned);
bufferHandle = GCHandle.Alloc(this);
Win32.MidiHeader header = new Win32.MidiHeader();
header.lpData = dataHandle.AddrOfPinnedObject();
header.dwBufferLength = (uint)length;
header.dwUser = GCHandle.ToIntPtr(bufferHandle);
pHeader = Marshal.AllocHGlobal(Win32.MidiHeader.SizeOfMidiHeader);
Marshal.StructureToPtr(header, pHeader, true);
}