public static object LateCall(object Instance, Type Type, string MemberName, object[] Arguments, string[] ArgumentNames, Type[] TypeArguments, bool[] CopyBack, bool IgnoreReturn) { if (Arguments == null) { Arguments = Symbols.NoArguments; } if (ArgumentNames == null) { ArgumentNames = Symbols.NoArgumentNames; } if (TypeArguments == null) { TypeArguments = Symbols.NoTypeArguments; } Symbols.Container BaseReference = Type == null ? new Symbols.Container(Instance) : new Symbols.Container(Type); if (BaseReference.IsCOMObject) { return(LateBinding.InternalLateCall(Instance, Type, MemberName, Arguments, ArgumentNames, CopyBack, IgnoreReturn)); } BindingFlags InvocationFlags = BindingFlags.InvokeMethod | BindingFlags.GetProperty; if (IgnoreReturn) { InvocationFlags |= BindingFlags.IgnoreReturn; } OverloadResolution.ResolutionFailure Failure = OverloadResolution.ResolutionFailure.None; return(NewLateBinding.CallMethod(BaseReference, MemberName, Arguments, ArgumentNames, TypeArguments, CopyBack, InvocationFlags, true, ref Failure)); }
public static object CallByName(object ObjectRef, string ProcName, CallType UseCallType, params object[] Args) { switch (UseCallType) { case CallType.Method: return(LateBinding.InternalLateCall(ObjectRef, null, ProcName, Args, null, null, false)); case CallType.Get: return(LateBinding.LateGet(ObjectRef, null, ProcName, Args, null, null)); case CallType.Let: case CallType.Set: { System.Type objType = null; LateBinding.InternalLateSet(ObjectRef, ref objType, ProcName, Args, null, false, UseCallType); return(null); } } throw new ArgumentException(Utils.GetResourceString("Argument_InvalidValue1", new string[] { "CallType" })); }