unsafe public Recv GetNextDispatch() { var ret = (MethodCall.ReturnValue.GetNextDispatch)InvokeOverSocket(new MethodCall.GetNextDispatch()); CheckHresult(ret.Hresult); fixed(byte *b = &ret.Data[0]) { var pData = (IntPtr)b; var pRecv = Marshal.PtrToStructure <SIMCONNECT_RECV> (pData); switch ((RecvId)pRecv.dwID) { case RecvId.Event: return(RecvEvent.FromMemory(pData)); case RecvId.SimobjectData: return(RecvSimObjectData.FromMemory(pData, dataDefinitionTypeLookup)); case RecvId.SimobjectDataByType: return(RecvSimObjectDataByType.FromMemory(pData, dataDefinitionTypeLookup)); default: return(Recv.FromMemory(pData)); } } }
internal static new RecvSimObjectDataByType FromMemory(IntPtr pData, Dictionary <uint, Type> dataDefinitionTypeLookup) { var ret = new RecvSimObjectDataByType(Marshal.PtrToStructure <SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE> (pData)); var sType = dataDefinitionTypeLookup [ret.DefineId]; ret.Data = Marshal.PtrToStructure(pData + (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE.dwDataStart), sType); return(ret); }