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

37 lines
1.4 KiB
C#

namespace Standard
{
using Microsoft.Win32.SafeHandles;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.ConstrainedExecution;
internal sealed class SafeGdiplusStartupToken : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeGdiplusStartupToken() : base(true)
{
}
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected override bool ReleaseHandle()
{
return (Standard.NativeMethods.GdiplusShutdown(base.handle) == Standard.Status.Ok);
}
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode"), SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope"), SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes")]
public static Standard.SafeGdiplusStartupToken Startup()
{
IntPtr ptr;
Standard.StartupOutput output;
Standard.SafeGdiplusStartupToken token = new Standard.SafeGdiplusStartupToken();
if (Standard.NativeMethods.GdiplusStartup(out ptr, new Standard.StartupInput(), out output) == Standard.Status.Ok)
{
token.handle = ptr;
return token;
}
token.Dispose();
throw new Exception("Unable to initialize GDI+");
}
}
}