private Invoke ( |
||
inst | ||
args | ||
kw | ||
리턴 |
//==================================================================== // This is a hack. Generally, no managed class is considered callable // from Python - with the exception of System.Delegate. It is useful // to be able to call a System.Delegate instance directly, especially // when working with multicast delegates. //==================================================================== public static IntPtr tp_call(IntPtr ob, IntPtr args, IntPtr kw) { //ManagedType self = GetManagedObject(ob); IntPtr tp = Runtime.PyObject_TYPE(ob); ClassBase cb = (ClassBase)GetManagedObject(tp); if (cb.type != typeof(System.Delegate)) { Exceptions.SetError(Exceptions.TypeError, "object is not callable"); return(IntPtr.Zero); } CLRObject co = (CLRObject)ManagedType.GetManagedObject(ob); Delegate d = co.inst as Delegate; BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; MethodInfo method = d.GetType().GetMethod("Invoke", flags); MethodBinder binder = new MethodBinder(method); return(binder.Invoke(ob, args, kw)); }
public virtual IntPtr Invoke(IntPtr target, IntPtr args, IntPtr kw, MethodBase info) { return(binder.Invoke(target, args, kw, info, this.info)); }
//==================================================================== // This is a hack. Generally, no managed class is considered callable // from Python - with the exception of System.Delegate. It is useful // to be able to call a System.Delegate instance directly, especially // when working with multicast delegates. //==================================================================== public static IntPtr tp_call(IntPtr ob, IntPtr args, IntPtr kw) { //ManagedType self = GetManagedObject(ob); IntPtr tp = Runtime.PyObject_TYPE(ob); ClassBase cb = (ClassBase)GetManagedObject(tp); if (cb.type != typeof(System.Delegate)) { Exceptions.SetError(Exceptions.TypeError, "object is not callable"); return IntPtr.Zero; } CLRObject co = (CLRObject)ManagedType.GetManagedObject(ob); Delegate d = co.inst as Delegate; BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; MethodInfo method = d.GetType().GetMethod("Invoke", flags); MethodBinder binder = new MethodBinder(method); return binder.Invoke(ob, args, kw); }
internal void SetItem(IntPtr inst, IntPtr args) { SetterBinder.Invoke(inst, args, IntPtr.Zero); }
internal IntPtr GetItem(IntPtr inst, IntPtr args) { return(GetterBinder.Invoke(inst, args, IntPtr.Zero)); }
internal void SetItem(BorrowedReference inst, BorrowedReference args) { SetterBinder.Invoke(inst, args, null); }
internal NewReference GetItem(BorrowedReference inst, BorrowedReference args) { return(GetterBinder.Invoke(inst, args, null)); }