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

237 lines
9.5 KiB
C#

namespace Standard
{
using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
internal struct HRESULT
{
[FieldOffset(0)]
private readonly uint _value;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT COR_E_OBJECTDISPOSED;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT DESTS_E_NO_MATCHING_ASSOC_HANDLER;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT DESTS_E_NORECDOCS;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT DESTS_E_NOTALLCLEARED;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_ABORT;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_ACCESSDENIED;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_FAIL;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_INVALIDARG;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_NOINTERFACE;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_NOTIMPL;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_OUTOFMEMORY;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_PENDING;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_POINTER;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT E_UNEXPECTED;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT INTSAFE_E_ARITHMETIC_OVERFLOW;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT REGDB_E_CLASSNOTREG;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT S_FALSE;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT S_OK;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT STG_E_INVALIDFUNCTION;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT WC_E_GREATERTHAN;
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
public static readonly Standard.HRESULT WC_E_SYNTAX;
static HRESULT()
{
S_OK = new Standard.HRESULT(0);
S_FALSE = new Standard.HRESULT(1);
E_PENDING = new Standard.HRESULT(0x8000000a);
E_NOTIMPL = new Standard.HRESULT(0x80004001);
E_NOINTERFACE = new Standard.HRESULT(0x80004002);
E_POINTER = new Standard.HRESULT(0x80004003);
E_ABORT = new Standard.HRESULT(0x80004004);
E_FAIL = new Standard.HRESULT(0x80004005);
E_UNEXPECTED = new Standard.HRESULT(0x8000ffff);
STG_E_INVALIDFUNCTION = new Standard.HRESULT(0x80030001);
REGDB_E_CLASSNOTREG = new Standard.HRESULT(0x80040154);
DESTS_E_NO_MATCHING_ASSOC_HANDLER = new Standard.HRESULT(0x80040f03);
DESTS_E_NORECDOCS = new Standard.HRESULT(0x80040f04);
DESTS_E_NOTALLCLEARED = new Standard.HRESULT(0x80040f05);
E_ACCESSDENIED = new Standard.HRESULT(0x80070005);
E_OUTOFMEMORY = new Standard.HRESULT(0x8007000e);
E_INVALIDARG = new Standard.HRESULT(0x80070057);
INTSAFE_E_ARITHMETIC_OVERFLOW = new Standard.HRESULT(0x80070216);
COR_E_OBJECTDISPOSED = new Standard.HRESULT(0x80131622);
WC_E_GREATERTHAN = new Standard.HRESULT(0xc00cee23);
WC_E_SYNTAX = new Standard.HRESULT(0xc00cee2d);
}
public HRESULT(uint i)
{
this._value = i;
}
public override bool Equals(object obj)
{
try
{
return (((Standard.HRESULT) obj)._value == this._value);
}
catch (InvalidCastException)
{
return false;
}
}
public static int GetCode(int error)
{
return (error & 0xffff);
}
public static Standard.Facility GetFacility(int errorCode)
{
return (((Standard.Facility) (errorCode >> 0x10)) & ((Standard.Facility) 0x1fff));
}
public override int GetHashCode()
{
return this._value.GetHashCode();
}
public static Standard.HRESULT Make(bool severe, Standard.Facility facility, int code)
{
return new Standard.HRESULT((uint) (((severe ? -2147483648 : 0) | (((int) facility) << 0x10)) | code));
}
public static bool operator ==(Standard.HRESULT hrLeft, Standard.HRESULT hrRight)
{
return (hrLeft._value == hrRight._value);
}
public static bool operator !=(Standard.HRESULT hrLeft, Standard.HRESULT hrRight)
{
return !(hrLeft == hrRight);
}
public void ThrowIfFailed()
{
this.ThrowIfFailed(null);
}
[SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes", Justification="Only recreating Exceptions that were already raised."), SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
public void ThrowIfFailed(string message)
{
if (this.Failed)
{
if (string.IsNullOrEmpty(message))
{
message = this.ToString();
}
Exception exceptionForHR = Marshal.GetExceptionForHR((int) this._value, new IntPtr(-1));
if (exceptionForHR.GetType() == typeof(COMException))
{
if (this.Facility == Standard.Facility.Win32)
{
exceptionForHR = new Win32Exception(this.Code, message);
}
else
{
exceptionForHR = new COMException(message, (int) this._value);
}
}
else
{
ConstructorInfo constructor = exceptionForHR.GetType().GetConstructor(new Type[] { typeof(string) });
if (null != constructor)
{
exceptionForHR = constructor.Invoke(new object[] { message }) as Exception;
}
}
throw exceptionForHR;
}
}
public static void ThrowLastError()
{
((Standard.HRESULT) Standard.Win32Error.GetLastError()).ThrowIfFailed();
}
public override string ToString()
{
foreach (FieldInfo info in typeof(Standard.HRESULT).GetFields(BindingFlags.Public | BindingFlags.Static))
{
if (info.FieldType == typeof(Standard.HRESULT))
{
Standard.HRESULT hresult = (Standard.HRESULT) info.GetValue(null);
if (hresult == this)
{
return info.Name;
}
}
}
if (this.Facility == Standard.Facility.Win32)
{
foreach (FieldInfo info2 in typeof(Standard.Win32Error).GetFields(BindingFlags.Public | BindingFlags.Static))
{
if (info2.FieldType == typeof(Standard.Win32Error))
{
Standard.Win32Error error = (Standard.Win32Error) info2.GetValue(null);
if (((Standard.HRESULT) error) == this)
{
return ("HRESULT_FROM_WIN32(" + info2.Name + ")");
}
}
}
}
return string.Format(CultureInfo.InvariantCulture, "0x{0:X8}", new object[] { this._value });
}
public int Code
{
get
{
return GetCode((int) this._value);
}
}
public Standard.Facility Facility
{
get
{
return GetFacility((int) this._value);
}
}
public bool Failed
{
get
{
return (this._value < 0);
}
}
public bool Succeeded
{
get
{
return (this._value >= 0);
}
}
}
}