Files
2026-06-04 11:42:34 +02:00

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;
}
}