268 lines
5.0 KiB
C#
268 lines
5.0 KiB
C#
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;
|
|
}
|
|
}
|