mirror of
https://github.com/digital-jellyfish/Virtu.git
synced 2024-11-30 20:49:26 +00:00
bc4caaf2b1
--HG-- extra : convert_revision : svn%3Affd33b8c-2492-42e0-bdc5-587b920b7d6d/trunk%4046550
33 lines
774 B
C#
33 lines
774 B
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security;
|
|
|
|
namespace Jellyfish.Library
|
|
{
|
|
public static class GCHandleHelpers
|
|
{
|
|
[SecurityCritical]
|
|
public static void Pin(object value, Action<IntPtr> action)
|
|
{
|
|
if (action == null)
|
|
{
|
|
throw new ArgumentNullException("action");
|
|
}
|
|
|
|
var gcHandle = new GCHandle();
|
|
try
|
|
{
|
|
gcHandle = GCHandle.Alloc(value, GCHandleType.Pinned);
|
|
action(gcHandle.AddrOfPinnedObject());
|
|
}
|
|
finally
|
|
{
|
|
if (gcHandle.IsAllocated)
|
|
{
|
|
gcHandle.Free();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|