コード例 #1
0
        public bool WriteStructMember(ORNames Struct, ORNames Member, Object NewValue, uint Address = 0)
        {
            if (Address <= 0)
            {
                Address = GetStructAddress(Struct);
            }
            int  Offset = GetStructMemberOffset(Struct, Member);
            int  Size   = GetStructMemberSize(Struct, Member);
            int  Count  = GetStructMemberCount(Struct, Member);
            Type type   = GetStructMemberType(Struct, Member);

            if (Count <= 0 && NewValue.GetType() != type)
            {
                throw new InvalidCastException("OffsetReader.WriteStructMember: NewValue is not of the expected type. NewValue type: " + NewValue.GetType().ToString() + " Expected type: " + type.ToString());
            }

            if (type == StringType)
            {
                int    Length        = Size;
                byte[] StringAsBytes = Encoding.UTF8.GetBytes((string)NewValue);
                byte[] buffer        = new byte[Length];
                Array.Copy(StringAsBytes, buffer, StringAsBytes.Length < buffer.Length - 1 ? StringAsBytes.Length : buffer.Length - 1);
                buffer[buffer.Length - 1] = 0;
                return(mem.WriteMemory((uint)(Offset + Address), buffer.Length, ref buffer));
            }
            if (Count <= 0)
            {
                byte[] buffer = ReadWriteMemory.RawSerialize(NewValue);
                return(mem.WriteMemory((uint)(Offset + Address), buffer.Length, ref buffer));
            }
            else
            {
                Array  NewArray = (Array)NewValue;
                byte[] buffer   = new byte[Size];
                for (int i = 0; i < Count && i < NewArray.Length; i++)
                {
                    ReadWriteMemory.RawSerialize(NewArray.GetValue(i)).CopyTo(buffer, i * Size / Count);
                }
                return(mem.WriteMemory((uint)(Offset + Address), buffer.Length, ref buffer));
            }
        }
コード例 #2
0
        public void WriteStructMember(ORNames Struct, ORNames Member, Object NewValue, ref byte[] Data)
        {
            int  Offset = GetStructMemberOffset(Struct, Member);
            int  Size   = GetStructMemberSize(Struct, Member);
            int  Count  = GetStructMemberCount(Struct, Member);
            Type type   = GetStructMemberType(Struct, Member);

            if (Count <= 0 && NewValue.GetType() != type)
            {
                throw new InvalidCastException("OffsetReader.WriteStructMember: NewValue is not of the expected type. NewValue type: " + NewValue.GetType().ToString() + " Expected type: " + type.ToString());
            }

            if (type == StringType)
            {
                int    Length        = Size;
                byte[] StringAsBytes = Encoding.UTF8.GetBytes((string)NewValue);
                int    CopyLength    = StringAsBytes.Length < Length - 1 ? StringAsBytes.Length : Length - 1;
                Array.Copy(StringAsBytes, 0, Data, Offset, CopyLength);
                Data[Offset + CopyLength] = 0;
                return;
            }
            if (Count <= 0)
            {
                byte[] buffer = ReadWriteMemory.RawSerialize(NewValue);
                buffer.CopyTo(Data, Offset);
                return;
            }
            else
            {
                Array  NewArray = (Array)NewValue;
                byte[] buffer   = new byte[Size];
                for (int i = 0; i < Count && i < NewArray.Length; i++)
                {
                    ReadWriteMemory.RawSerialize(NewArray.GetValue(i)).CopyTo(buffer, i * Size / Count);
                }
                buffer.CopyTo(Data, Offset);
                return;
            }
        }