public bool RegisterUriScheme(string scheme, GLib.VfsFileLookupFunc uri_func, GLib.DestroyNotify uri_destroy, GLib.VfsFileLookupFunc parse_name_func) { IntPtr native_scheme = GLib.Marshaller.StringToPtrGStrdup(scheme); GLibSharp.VfsFileLookupFuncWrapper uri_func_wrapper = new GLibSharp.VfsFileLookupFuncWrapper(uri_func); GLibSharp.VfsFileLookupFuncWrapper parse_name_func_wrapper = new GLibSharp.VfsFileLookupFuncWrapper(parse_name_func); IntPtr parse_name_data; GLib.DestroyNotify parse_name_destroy; if (parse_name_func == null) { parse_name_data = IntPtr.Zero; parse_name_destroy = null; } else { parse_name_data = (IntPtr)GCHandle.Alloc(parse_name_func_wrapper); parse_name_destroy = GLib.DestroyHelper.NotifyHandler; } bool raw_ret = g_vfs_register_uri_scheme(Handle, native_scheme, uri_func_wrapper.NativeDelegate, IntPtr.Zero, uri_destroy, parse_name_func_wrapper.NativeDelegate, parse_name_data, parse_name_destroy); bool ret = raw_ret; GLib.Marshaller.Free(native_scheme); return(ret); }
public VfsFileLookupFuncWrapper(GLib.VfsFileLookupFunc managed) { this.managed = managed; if (managed != null) { NativeDelegate = new VfsFileLookupFuncNative(NativeCallback); } }