using System; using System.Runtime.InteropServices; namespace System { // Token: 0x020006BE RID: 1726 [StructLayout(LayoutKind.Explicit)] internal struct Variant { // Token: 0x06004118 RID: 16664 RVA: 0x000DD8F8 File Offset: 0x000DBAF8 public void SetValue(object obj) { this.vt = 0; if (obj == null) { return; } Type type = obj.GetType(); if (type.IsEnum) { type = Enum.GetUnderlyingType(type); } if (type == typeof(sbyte)) { this.vt = 16; this.cVal = (sbyte)obj; } else if (type == typeof(byte)) { this.vt = 17; this.bVal = (byte)obj; } else if (type == typeof(short)) { this.vt = 2; this.iVal = (short)obj; } else if (type == typeof(ushort)) { this.vt = 18; this.uiVal = (ushort)obj; } else if (type == typeof(int)) { this.vt = 3; this.lVal = (int)obj; } else if (type == typeof(uint)) { this.vt = 19; this.ulVal = (uint)obj; } else if (type == typeof(long)) { this.vt = 20; this.llVal = (long)obj; } else if (type == typeof(ulong)) { this.vt = 21; this.ullVal = (ulong)obj; } else if (type == typeof(float)) { this.vt = 4; this.fltVal = (float)obj; } else if (type == typeof(double)) { this.vt = 5; this.dblVal = (double)obj; } else if (type == typeof(string)) { this.vt = 8; this.bstrVal = Marshal.StringToBSTR((string)obj); } else if (type == typeof(bool)) { this.vt = 11; this.lVal = ((!(bool)obj) ? 0 : (-1)); } else if (type == typeof(BStrWrapper)) { this.vt = 8; this.bstrVal = Marshal.StringToBSTR(((BStrWrapper)obj).WrappedObject); } else if (type == typeof(UnknownWrapper)) { this.vt = 13; this.pdispVal = Marshal.GetIUnknownForObject(((UnknownWrapper)obj).WrappedObject); } else if (type == typeof(DispatchWrapper)) { this.vt = 9; this.pdispVal = Marshal.GetIDispatchForObject(((DispatchWrapper)obj).WrappedObject); } else { try { this.pdispVal = Marshal.GetIDispatchForObject(obj); this.vt = 9; return; } catch { } try { this.vt = 13; this.pdispVal = Marshal.GetIUnknownForObject(obj); } catch (Exception ex) { throw new NotImplementedException(string.Format("Variant couldn't handle object of type {0}", obj.GetType()), ex); } } } // Token: 0x06004119 RID: 16665 RVA: 0x000DDC4C File Offset: 0x000DBE4C public object GetValue() { object obj = null; switch (this.vt) { case 2: obj = this.iVal; break; case 3: obj = this.lVal; break; case 4: obj = this.fltVal; break; case 5: obj = this.dblVal; break; case 8: obj = Marshal.PtrToStringBSTR(this.bstrVal); break; case 9: case 13: if (this.pdispVal != IntPtr.Zero) { obj = Marshal.GetObjectForIUnknown(this.pdispVal); } break; case 11: obj = this.boolVal != 0; break; case 16: obj = this.cVal; break; case 17: obj = this.bVal; break; case 18: obj = this.uiVal; break; case 19: obj = this.ulVal; break; case 20: obj = this.llVal; break; case 21: obj = this.ullVal; break; } return obj; } // Token: 0x0600411A RID: 16666 RVA: 0x000DDDB8 File Offset: 0x000DBFB8 public void Clear() { if (this.vt == 8) { Marshal.FreeBSTR(this.bstrVal); } else if ((this.vt == 9 || this.vt == 13) && this.pdispVal != IntPtr.Zero) { Marshal.Release(this.pdispVal); } } // Token: 0x04001A25 RID: 6693 [FieldOffset(0)] public short vt; // Token: 0x04001A26 RID: 6694 [FieldOffset(2)] public ushort wReserved1; // Token: 0x04001A27 RID: 6695 [FieldOffset(4)] public ushort wReserved2; // Token: 0x04001A28 RID: 6696 [FieldOffset(6)] public ushort wReserved3; // Token: 0x04001A29 RID: 6697 [FieldOffset(8)] public long llVal; // Token: 0x04001A2A RID: 6698 [FieldOffset(8)] public int lVal; // Token: 0x04001A2B RID: 6699 [FieldOffset(8)] public byte bVal; // Token: 0x04001A2C RID: 6700 [FieldOffset(8)] public short iVal; // Token: 0x04001A2D RID: 6701 [FieldOffset(8)] public float fltVal; // Token: 0x04001A2E RID: 6702 [FieldOffset(8)] public double dblVal; // Token: 0x04001A2F RID: 6703 [FieldOffset(8)] public short boolVal; // Token: 0x04001A30 RID: 6704 [FieldOffset(8)] public IntPtr bstrVal; // Token: 0x04001A31 RID: 6705 [FieldOffset(8)] public sbyte cVal; // Token: 0x04001A32 RID: 6706 [FieldOffset(8)] public ushort uiVal; // Token: 0x04001A33 RID: 6707 [FieldOffset(8)] public uint ulVal; // Token: 0x04001A34 RID: 6708 [FieldOffset(8)] public ulong ullVal; // Token: 0x04001A35 RID: 6709 [FieldOffset(8)] public int intVal; // Token: 0x04001A36 RID: 6710 [FieldOffset(8)] public uint uintVal; // Token: 0x04001A37 RID: 6711 [FieldOffset(8)] public IntPtr pdispVal; // Token: 0x04001A38 RID: 6712 [FieldOffset(8)] public BRECORD bRecord; } }