Files
HandyControl/Net35/HandyControl_Net35/Shell/Standard/PROPVARIANT.cs
T
2019-01-21 00:43:10 +08:00

85 lines
2.7 KiB
C#

namespace Standard
{
using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit), SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")]
internal class PROPVARIANT : IDisposable
{
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields"), FieldOffset(8)]
private short boolVal;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields"), FieldOffset(8)]
private byte byteVal;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields"), FieldOffset(8)]
private long longVal;
[SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources"), SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields"), FieldOffset(8)]
private IntPtr pointerVal;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields"), FieldOffset(0)]
private ushort vt;
public void Clear()
{
NativeMethods.PropVariantClear(this);
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="disposing")]
private void Dispose(bool disposing)
{
this.Clear();
}
~PROPVARIANT()
{
this.Dispose(false);
}
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
public string GetValue()
{
if (this.vt == 0x1f)
{
return Marshal.PtrToStringUni(this.pointerVal);
}
return null;
}
public void SetValue(bool f)
{
this.Clear();
this.vt = 11;
this.boolVal = f ? ((short) (-1)) : ((short) 0);
}
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
public void SetValue(string val)
{
this.Clear();
this.vt = 0x1f;
this.pointerVal = Marshal.StringToCoTaskMemUni(val);
}
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
public VarEnum VarType
{
get
{
return (VarEnum) this.vt;
}
}
private static class NativeMethods
{
[DllImport("ole32.dll")]
internal static extern Standard.HRESULT PropVariantClear(PROPVARIANT pvar);
}
}
}