コード例 #1
0
ファイル: NewLateBinding.cs プロジェクト: ysc0423/CommonCore
        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));
        }
コード例 #2
0
        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" }));
        }