95 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|