Files
HandyControl/src/Shared/Microsoft.Windows.Shell/Standard/PROPVARIANT.cs
T

95 lines
2.7 KiB
C#

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