#region Using Statements using System; using System.Runtime.InteropServices; #endregion // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace ANX.Framework.NonXNA { internal class HashHelper { public unsafe static int GetGCHandleHashCode(object obj) { int result = 0; GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned); try { int objSize = Marshal.SizeOf(obj); int* ptr = (int*)handle.AddrOfPinnedObject().ToPointer(); for (int i = 4; i <= objSize; i += 4) { result ^= *ptr; ptr++; } if (result <= 0) { result = int.MaxValue; } } finally { handle.Free(); } return result; } } }