public override MetaObject BindInvokeMember(InvokeMemberBinder binder, MetaObject[] args) { ContractUtils.RequiresNotNull(binder, "binder"); if (args.Any(arg => ComBinderHelpers.IsStrongBoxArg(arg))) { return(ComBinderHelpers.RewriteStrongBoxAsRef(binder, this, args)); } ComMethodDesc methodDesc; if (_wrapperType.Funcs.TryGetValue(binder.Name, out methodDesc) || _self.TryGetMemberMethodExplicit(binder.Name, out methodDesc)) { return(new ComInvokeBinder( binder.Arguments, args, IDispatchRestriction(), Expression.Constant(methodDesc), Expression.Property( Expression.Convert(Expression, typeof(IDispatchComObject)), typeof(IDispatchComObject).GetProperty("DispatchObject") ), methodDesc ).Invoke()); } return(base.BindInvokeMember(binder, args)); }
public override MetaObject BindInvoke(InvokeBinder binder, MetaObject[] args) { if (args.Any(arg => ComBinderHelpers.IsStrongBoxArg(arg))) { return(ComBinderHelpers.RewriteStrongBoxAsRef(binder, this, args)); } return(BindComInvoke(binder.Arguments, args)); }
public override MetaObject BindSetIndex(SetIndexBinder binder, MetaObject[] indexes, MetaObject value) { if (_callable.ComMethodDesc.IsPropertyPut) { if (indexes.Any(arg => ComBinderHelpers.IsStrongBoxArg(arg))) { return(ComBinderHelpers.RewriteStrongBoxAsRef(binder, this, indexes.AddLast(value))); } return(BindComInvoke(binder.Arguments, indexes.AddLast(value))); } return(base.BindSetIndex(binder, indexes, value)); }