static uint RegisterSignal(string signal_name, GLib.GType gtype, GLib.Signal.Flags signal_flags, GLib.GType return_type, GLib.GType[] param_types, ClosureMarshal marshaler) { IntPtr[] native_param_types = new IntPtr [param_types.Length]; for (int parm_idx = 0; parm_idx < param_types.Length; parm_idx++) { native_param_types [parm_idx] = param_types [parm_idx].Val; } IntPtr native_signal_name = GLib.Marshaller.StringToPtrGStrdup(signal_name); try { return(g_signal_newv(native_signal_name, gtype.Val, signal_flags, CreateClosure(marshaler), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, return_type.Val, (uint)param_types.Length, native_param_types)); } finally { GLib.Marshaller.Free(native_signal_name); } }
static extern uint g_signal_newv(IntPtr signal_name, IntPtr gtype, GLib.Signal.Flags signal_flags, IntPtr closure, IntPtr accumulator, IntPtr accu_data, IntPtr c_marshaller, IntPtr return_type, uint n_params, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] param_types);