/// <summary> /// Generates Parameters that can be passed into a method /// /// Memory must be Reset() between runs or else string will remain allocated in the heap /// </summary> /// <param name="values"></param> /// <returns></returns> protected List <ushort> GenerateParameters(object[] values) { var parameters = new List <ushort>(); foreach (var v in values) { switch (v) { case string @parameterString: { var stringParameterPointer = mbbsEmuMemoryCore.AllocateVariable(Guid.NewGuid().ToString(), (ushort)(@parameterString.Length + 1)); mbbsEmuMemoryCore.SetArray(stringParameterPointer, Encoding.ASCII.GetBytes(@parameterString)); parameters.Add(stringParameterPointer.Offset); parameters.Add(stringParameterPointer.Segment); break; } case uint @parameterULong: { var longBytes = BitConverter.GetBytes(@parameterULong); parameters.Add(BitConverter.ToUInt16(longBytes, 0)); parameters.Add(BitConverter.ToUInt16(longBytes, 2)); break; } case int @parameterLong: { var longBytes = BitConverter.GetBytes(@parameterLong); parameters.Add(BitConverter.ToUInt16(longBytes, 0)); parameters.Add(BitConverter.ToUInt16(longBytes, 2)); break; } case ushort @parameterUInt: parameters.Add(@parameterUInt); break; case short @parameterInt: parameters.Add((ushort)@parameterInt); break; } } return(parameters); }