static extern bool g_type_check_value_holds(ref Value val, IntPtr gtype);
static extern void g_value_set_string(ref Value val, IntPtr data);
static extern void g_value_set_uint(ref Value val, uint data);
static extern void g_value_set_float(ref Value val, float data);
static extern void g_value_set_param(ref Value val, IntPtr data);
static extern void g_value_set_boolean(ref Value val, bool data);
static extern void g_value_set_double(ref Value val, double data);
static extern uint g_value_get_flags(ref Value val);
static extern float g_value_get_float(ref Value val);
static extern double g_value_get_double(ref Value val);
static extern int g_value_get_enum(ref Value val);
static extern sbyte g_value_get_char(ref Value val);
static extern IntPtr g_value_get_boxed(ref Value val);
static extern bool g_value_get_boolean(ref Value val);
static extern uint g_value_get_uint(ref Value val);
static extern int g_value_get_int(ref Value val);
static extern ulong g_value_get_uint64(ref Value val);
static extern long g_value_get_int64(ref Value val);
static extern void g_value_set_boxed(ref Value val, IntPtr data);
static extern IntPtr g_value_get_object(ref Value val);
static extern void g_value_set_enum(ref Value val, int data);
static extern IntPtr g_value_get_param(ref Value val);
static extern void g_value_set_object(ref Value val, IntPtr data);
static extern IntPtr g_value_get_pointer(ref Value val);
static extern void g_value_set_pointer(ref Value val, IntPtr data);
static extern IntPtr g_value_get_string(ref Value val);
static extern void g_value_set_uchar(ref Value val, byte data);
static extern byte g_value_get_uchar(ref Value val);
static extern void g_value_set_uint64(ref Value val, ulong data);
bool NativeInvoker(InvocationHint ihint, object[] pvals) { int val_sz = Marshal.SizeOf (typeof (Value)); IntPtr buf = Marshal.AllocHGlobal (pvals.Length * val_sz); Value[] vals = new Value [pvals.Length]; for (int i = 0; i < pvals.Length; i++) { vals [i] = new Value (pvals [i]); IntPtr p = new IntPtr ((long) buf + i * val_sz); Marshal.StructureToPtr (vals [i], p, false); } bool result = cb (ref ihint, (uint) pvals.Length, buf, user_data); foreach (Value v in vals) v.Dispose (); Marshal.FreeHGlobal (buf); return result; }