public IntPtr Init(string name, Func <NativeArray, NativeArray, int> cmp) { // TODO: Complete member initialization _cmp = cmp; _namePinned = GCHandle.Alloc( Encoding.ASCII.GetBytes(name), GCHandleType.Pinned); var thisHandle = GCHandle.Alloc(this); var chandle = LevelDbInterop.leveldb_comparator_create( GCHandle.ToIntPtr(thisHandle), Marshal.GetFunctionPointerForDelegate(DestructorInstance), Marshal.GetFunctionPointerForDelegate(CompareInstance), Marshal.GetFunctionPointerForDelegate(NameAccessor)); if (chandle == default(IntPtr)) { thisHandle.Free(); } return(chandle); }