コード例 #1
0
        public void AfterGetRangeResults(object obj, string tabName)
        {
            List <Dictionary <string, string> > points = _RangePoints[tabName];
            IReflect arrReflect = obj as IReflect;
            int      length     = (int)arrReflect.InvokeMember("length", BindingFlags.GetProperty, null, obj, null, null, null, null);

            for (int i = 0; i < length; i++)
            {
                object   item                    = (object)arrReflect.InvokeMember(i.ToString(), BindingFlags.GetProperty, null, obj, null, null, null, null);
                IReflect itemReflect             = item as IReflect;
                Dictionary <string, string> p2vs = new Dictionary <string, string>();
                p2vs.Add("address", (string)itemReflect.InvokeMember("address", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("city", (string)itemReflect.InvokeMember("city", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("detailUrl", (string)itemReflect.InvokeMember("detailUrl", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("isAccurate", itemReflect.InvokeMember("isAccurate", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("phoneNumber", (string)itemReflect.InvokeMember("phoneNumber", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("postcode", (string)itemReflect.InvokeMember("postcode", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("province", (string)itemReflect.InvokeMember("province", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("title", (string)itemReflect.InvokeMember("title", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("uid", (string)itemReflect.InvokeMember("uid", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("url", (string)itemReflect.InvokeMember("url", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("lat", itemReflect.InvokeMember("lat", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("lng", itemReflect.InvokeMember("lng", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());

                points.Add(p2vs);
            }
        }
コード例 #2
0
        public void AfterGetPointResults(object item, string tabName, string fileName)
        {
            IReflect itemReflect             = item as IReflect;
            Dictionary <string, string> p2vs = new Dictionary <string, string>();

            p2vs.Add("district", (string)itemReflect.InvokeMember("district", BindingFlags.GetProperty, null, item, null, null, null, null));
            p2vs.Add("street", (string)itemReflect.InvokeMember("street", BindingFlags.GetProperty, null, item, null, null, null, null));
            p2vs.Add("province", (string)itemReflect.InvokeMember("province", BindingFlags.GetProperty, null, item, null, null, null, null));
            p2vs.Add("city", itemReflect.InvokeMember("city", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
            p2vs.Add("streetNumber", (string)itemReflect.InvokeMember("streetNumber", BindingFlags.GetProperty, null, item, null, null, null, null));
            SavePointToFile(p2vs, fileName);
            _GrabedPointNum++;
            _RangeSucceed[tabName] = true;
        }
コード例 #3
0
        internal override Object Construct(Object[] args)
        {
            if (args.Length == 0)
            {
                return(this.ConstructObject());
            }
            Object val = args[0];

            switch (Convert.GetTypeCode(val))
            {
            case TypeCode.Empty:
            case TypeCode.DBNull: return(this.ConstructObject());

            case TypeCode.Object:
                if (val is ScriptObject)
                {
                    return(val);
                }
                IReflect ir = null;
                if (val is IReflect)
                {
                    ir = (IReflect)val;
                }
                else
                {
                    ir = val.GetType();
                }
                const BindingFlags flags =
                    BindingFlags.Public | BindingFlags.OptionalParamBinding |
                    BindingFlags.CreateInstance;
                return(ir.InvokeMember(String.Empty, flags, JSBinder.ob, val, new Object[0], null, null, null));
            }
            return(Convert.ToObject3(val, this.engine));
        }
コード例 #4
0
        private static bool TryInvoke(IReflect target, object[] args, out object result)
        {
            // ReSharper disable SuspiciousTypeConversion.Global

            var dispatchEx = target as IDispatchEx;

            if (dispatchEx != null)
            {
                // Standard IExpando-over-IDispatchEx support appears to leak the variants it
                // creates for the invocation arguments. This issue has been reported. In the
                // meantime we'll bypass this facility and interface with IDispatchEx directly.

                result = dispatchEx.Invoke(false, args);
                return(true);
            }

            // ReSharper restore SuspiciousTypeConversion.Global

            try
            {
                result = target.InvokeMember(SpecialMemberNames.Default, BindingFlags.InvokeMethod, null, target, args, null, CultureInfo.InvariantCulture, null);
                return(true);
            }
            catch (TargetInvocationException)
            {
                throw;
            }
            catch (Exception)
            {
                result = null;
                return(false);
            }
        }
コード例 #5
0
        internal override object Construct(object[] args)
        {
            if (args.Length == 0)
            {
                return(this.ConstructObject());
            }
            object ob = args[0];

            switch (Microsoft.JScript.Convert.GetTypeCode(ob))
            {
            case TypeCode.Empty:
            case TypeCode.DBNull:
                return(this.ConstructObject());

            case TypeCode.Object:
            {
                if (ob is ScriptObject)
                {
                    return(ob);
                }
                IReflect type = null;
                if (ob is IReflect)
                {
                    type = (IReflect)ob;
                }
                else
                {
                    type = ob.GetType();
                }
                return(type.InvokeMember(string.Empty, BindingFlags.OptionalParamBinding | BindingFlags.CreateInstance | BindingFlags.Public, JSBinder.ob, ob, new object[0], null, null, null));
            }
            }
            return(Microsoft.JScript.Convert.ToObject3(ob, base.engine));
        }
コード例 #6
0
ファイル: TypeTest.cs プロジェクト: ynkbt/moon
        public void Type_IRefect_InvokeMember_InstanceMethod_SecurityCritical()
        {
            IReflect r = typeof(GCHandle) as IReflect;
            GCHandle h = new GCHandle();

            Assert.Throws <MethodAccessException> (delegate {
                // SecurityCritical method
                r.InvokeMember("AddrOfPinnedObject", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, h, null, null, CultureInfo.InvariantCulture, null);
            }, "InvokeMember");
        }
コード例 #7
0
        public void AfterGetPoints(object obj, string fileName, string tabName)
        {
            this.RunPage.InvokeAppendLogText("该批次抓取完成", LogLevelType.System, true);

            IReflect arrReflect = obj as IReflect;
            int      length     = (int)arrReflect.InvokeMember("length", BindingFlags.GetProperty, null, obj, null, null, null, null);
            List <Dictionary <string, string> > pointInfos = new List <Dictionary <string, string> >();

            for (int i = 0; i < length; i++)
            {
                object   item                    = (object)arrReflect.InvokeMember(i.ToString(), BindingFlags.GetProperty, null, obj, null, null, null, null);
                IReflect itemReflect             = item as IReflect;
                Dictionary <string, string> p2vs = new Dictionary <string, string>();
                p2vs.Add("city", (string)itemReflect.InvokeMember("city", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("district", (string)itemReflect.InvokeMember("district", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("province", (string)itemReflect.InvokeMember("province", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("street", (string)itemReflect.InvokeMember("street", BindingFlags.GetProperty, null, item, null, null, null, null));
                p2vs.Add("streetNumber", itemReflect.InvokeMember("streetNumber", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("township", itemReflect.InvokeMember("township", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("formattedAddress", itemReflect.InvokeMember("formattedAddress", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("building", itemReflect.InvokeMember("building", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("buildingType", itemReflect.InvokeMember("buildingType", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("lat", itemReflect.InvokeMember("lat", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());
                p2vs.Add("lng", itemReflect.InvokeMember("lng", BindingFlags.GetProperty, null, item, null, null, null, null).ToString());

                pointInfos.Add(p2vs);
            }

            if (SaveRangePointsToFile(pointInfos, fileName))
            {
                _GrabPointNum          = _GrabPointNum + OnePageRowCount;
                _RangeSucceed[tabName] = true;

                TimeSpan ts = DateTime.Now - _StartTime;
                if (_ListSheet.RowCount > _CurrentIndex)
                {
                    double needMinutes = ((double)_ListSheet.RowCount - (double)_CurrentIndex) * (ts.TotalMinutes / (double)_GrabPointNum);
                    this.RunPage.InvokeAppendLogText("预计剩余" + ((int)needMinutes).ToString() + "分钟", Base.EnumTypes.LogLevelType.System, true);
                }
            }
        }
コード例 #8
0
 // InvokeMember:
 // If we get a call for DISPID=0, fire the CLR event.
 //
 object IReflect.InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters)
 {
     //
     if (name == "[DISPID=0]")
     {
         // we know we're getting called back to fire the event - translate this now into a CLR event.
         OnHtmlEvent();
         // since there's no return value for void, return null.
         return(null);
     }
     else
     {
         return(typeIReflectImplementation.InvokeMember(name, invokeAttr, binder, target, args, modifiers, culture, namedParameters));
     }
 }
コード例 #9
0
ファイル: InteropUtils.cs プロジェクト: KOZ60/Samples
        internal static object Invoke(SafeComObject o, string name, params object[] args)
        {
            IReflect  reflectType = o.Target.GetType();
            ArrayList lst         = UnwrapArrayList(args);
            object    result      = reflectType.InvokeMember(
                name,
                InvokeMemberBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);

            return(result);
        }
コード例 #10
0
ファイル: InteropUtils.cs プロジェクト: KOZ60/Samples
        internal static T GetProperty <T>(SafeComObject o, string name, params object[] indices)
        {
            IReflect  reflectType = o.Target.GetType();
            ArrayList lst         = UnwrapArrayList(indices);
            object    obj         = reflectType.InvokeMember(
                name,
                InvokeGetPropertyBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);

            return((T)obj);
        }
コード例 #11
0
ファイル: InteropUtils.cs プロジェクト: KOZ60/Samples
        internal static void SetProperty(SafeComObject o, string name, object value, params object[] indices)
        {
            // InvokeMember に渡す配列は パラメタ + プロパティの設定値
            ArrayList lst = UnwrapArrayList(indices);

            lst.Add(Unwrap(value));

            IReflect reflectType = o.Target.GetType();

            reflectType.InvokeMember(
                name,
                InvokeSetPropertyBindingFlags,
                null,
                o.Target,
                lst.ToArray(),
                null,
                null,
                NoArgumentNames);
        }
コード例 #12
0
 private static object InvokeMethod(IReflect type, object instance, string methodName, object[] @params, BindingFlags flags)
 {
     try
     {
         var method = type.GetMethod(methodName, flags);
         if (method == null && instance != null)
         {
             method = instance.GetType().GetMethod(methodName, flags);
         }
         if (method == null)
         {
             throw new ArgumentException(string.Format("Type '{0}' does not have a method named '{1}'.", type, methodName));
         }
         return(method.Invoke(instance, @params));
     }
     catch (AmbiguousMatchException)
     {
         return(type.InvokeMember(methodName, flags | BindingFlags.InvokeMethod, null, instance, @params, null, null, null));
     }
 }
コード例 #13
0
 private static bool TryInvokeMethod(IReflect type, object instance, string methodName, object[] @params, BindingFlags flags, out object result)
 {
     try
     {
         var method = type.GetMethod(methodName, flags);
         if (method == null && instance != null)
         {
             method = instance.GetType().GetMethod(methodName, flags);
         }
         if (method == null)
         {
             result = default;
             return(false);
         }
         result = method.Invoke(instance, @params);
         return(true);
     }
     catch (AmbiguousMatchException)
     {
         result = type.InvokeMember(methodName, flags | BindingFlags.InvokeMethod, null, instance, @params, null, null, null);
         return(true);
     }
 }
コード例 #14
0
ファイル: latebinding.cs プロジェクト: ArildF/masters
 private static Object CallCOMObject(IReflect ir, String name, Object ob, Binder binder, Object[] arguments,
                                     ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters,
                                     bool construct, bool brackets, VsaEngine engine){
   try{
     try{
       LateBinding.Change64bitIntegersToDouble(arguments);
       BindingFlags flags =
         BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static|BindingFlags.OptionalParamBinding;
       if (construct)
         return ir.InvokeMember(name, flags|BindingFlags.CreateInstance, binder, ob, arguments, modifiers, culture, namedParameters);
       else if (brackets){
         // Expression like ob.name[args]. First try to invoke as an indexed property. If that
         // results in a ArgumentException, try to evaluate (ob.name) and then invoke
         // the default indexed property on the result.
         try {
           return ir.InvokeMember(name, flags|BindingFlags.GetProperty|BindingFlags.GetField, binder, ob, arguments, modifiers, culture, namedParameters);
         }catch(TargetInvocationException){
           Object ob1 = ir.InvokeMember(name, flags|BindingFlags.GetProperty|BindingFlags.GetField, binder, ob, new Object[0], modifiers, culture, new String[0]);
           return LateBinding.CallValue(ob1, arguments, construct, brackets, engine, ob1, binder, culture, namedParameters);
         }
       }else{
         int length = arguments == null ? 0 : arguments.Length;
         if (namedParameters != null && namedParameters.Length > 0 && (namedParameters[0].Equals("[DISPID=-613]") || namedParameters[0].Equals("this")))
           length--;
         flags |= length > 0
           ? BindingFlags.InvokeMethod | BindingFlags.GetProperty
           : BindingFlags.InvokeMethod;
         return ir.InvokeMember(name, flags, binder, ob, arguments, modifiers, culture, namedParameters);
       }
     }catch(MissingMemberException){
       if (brackets) //ob["x"]. Tried ob.Item()["x"] but failed. So return undefined.
         return null;
       else //ob("x"). Tried ob.Item()("x") but failed. Complain that ob is not a callable thing.
         throw new JScriptException(JSError.FunctionExpected);
     }
   }catch(JScriptException e){
     if ((e.Number & 0xFFFF) == (int)JSError.FunctionExpected){
       //try to find a method on System.Object
       MemberInfo[] members = Typeob.Object.GetMember(name, BindingFlags.Public|BindingFlags.Instance);
       if (members != null && members.Length > 0)
         return LateBinding.CallOneOfTheMembers(members, arguments, construct, ob, binder, culture, namedParameters, engine);
     }
     throw e;
   }
 }
コード例 #15
0
 object?IReflect.InvokeMember(string name, BindingFlags invokeAttr, Binder?binder, object?target, object?[]?args, ParameterModifier[]?modifiers, CultureInfo?culture, string[]?namedParameters)
 => publicIReflect.InvokeMember(name, invokeAttr, binder, publicIAccessible, args, modifiers, culture, namedParameters);
コード例 #16
0
 private static object CallCOMObject(IReflect ir, string name, object ob, Binder binder, object[] arguments, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters, bool construct, bool brackets, VsaEngine engine)
 {
     object obj3;
     try
     {
         try
         {
             Change64bitIntegersToDouble(arguments);
             BindingFlags invokeAttr = BindingFlags.OptionalParamBinding | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
             if (construct)
             {
                 return ir.InvokeMember(name, invokeAttr | BindingFlags.CreateInstance, binder, ob, arguments, modifiers, culture, namedParameters);
             }
             if (brackets)
             {
                 try
                 {
                     return ir.InvokeMember(name, (invokeAttr | BindingFlags.GetProperty) | BindingFlags.GetField, binder, ob, arguments, modifiers, culture, namedParameters);
                 }
                 catch (TargetInvocationException)
                 {
                     object val = ir.InvokeMember(name, (invokeAttr | BindingFlags.GetProperty) | BindingFlags.GetField, binder, ob, new object[0], modifiers, culture, new string[0]);
                     return CallValue(val, arguments, construct, brackets, engine, val, binder, culture, namedParameters);
                 }
             }
             int num = (arguments == null) ? 0 : arguments.Length;
             if (((namedParameters != null) && (namedParameters.Length > 0)) && (namedParameters[0].Equals("[DISPID=-613]") || namedParameters[0].Equals("this")))
             {
                 num--;
             }
             invokeAttr |= (num > 0) ? (BindingFlags.GetProperty | BindingFlags.InvokeMethod) : BindingFlags.InvokeMethod;
             obj3 = ir.InvokeMember(name, invokeAttr, binder, ob, arguments, modifiers, culture, namedParameters);
         }
         catch (MissingMemberException)
         {
             if (!brackets)
             {
                 throw new JScriptException(JSError.FunctionExpected);
             }
             obj3 = null;
         }
         catch (COMException exception)
         {
             int errorCode = exception.ErrorCode;
             switch (errorCode)
             {
                 case -2147352570:
                 case -2147352573:
                     if (!brackets)
                     {
                         throw new JScriptException(JSError.FunctionExpected);
                     }
                     return null;
             }
             if ((errorCode & 0xffff0000L) == 0x800a0000L)
             {
                 string source = exception.Source;
                 if ((source != null) && (source.IndexOf("JScript") != -1))
                 {
                     throw new JScriptException(exception, null);
                 }
             }
             throw exception;
         }
     }
     catch (JScriptException exception2)
     {
         if ((exception2.Number & 0xffff) == 0x138a)
         {
             MemberInfo[] member = typeof(object).GetMember(name, BindingFlags.Public | BindingFlags.Instance);
             if ((member != null) && (member.Length > 0))
             {
                 return CallOneOfTheMembers(member, arguments, construct, ob, binder, culture, namedParameters, engine);
             }
         }
         throw exception2;
     }
     return obj3;
 }
コード例 #17
0
 internal object InvokeMember(string name, BindingFlags invokeAttr, Type objType, IReflect objIReflect, object target, object[] args, string[] namedParameters)
 {
     object obj4;
     if (objType.IsCOMObject)
     {
         ParameterModifier[] modifiers = null;
         if (((this.m_ByRefFlags != null) && (target != null)) && !RemotingServices.IsTransparentProxy(target))
         {
             ParameterModifier modifier = new ParameterModifier(args.Length);
             modifiers = new ParameterModifier[] { modifier };
             object obj5 = Missing.Value;
             int upperBound = args.GetUpperBound(0);
             for (int i = 0; i <= upperBound; i++)
             {
                 if (args[i] != obj5)
                 {
                     modifier[i] = this.m_ByRefFlags[i];
                 }
             }
         }
         try
         {
             new SecurityPermission(PermissionState.Unrestricted).Demand();
             return objIReflect.InvokeMember(name, invokeAttr, null, target, args, modifiers, null, namedParameters);
         }
         catch (MissingMemberException)
         {
             throw new MissingMemberException(Utils.GetResourceString("MissingMember_MemberNotFoundOnType2", new string[] { name, Utils.VBFriendlyName(objType) }));
         }
     }
     this.m_BindToName = name;
     this.m_objType = objType;
     if (name.Length == 0)
     {
         if (objType == objIReflect)
         {
             name = this.GetDefaultMemberName(objType);
             if (name == null)
             {
                 throw new MissingMemberException(Utils.GetResourceString("MissingMember_NoDefaultMemberFound1", new string[] { Utils.VBFriendlyName(objType) }));
             }
         }
         else
         {
             name = "";
         }
     }
     MethodBase[] match = this.GetMethodsByName(objType, objIReflect, name, invokeAttr);
     if (args == null)
     {
         args = new object[0];
     }
     object objState = null;
     MethodBase member = this.BindToMethod(invokeAttr, match, ref args, null, null, namedParameters, ref objState);
     if (member == null)
     {
         throw new MissingMemberException(Utils.GetResourceString("NoMethodTakingXArguments2", new string[] { this.CalledMethodName(), Conversions.ToString(this.GetPropArgCount(args, (invokeAttr & BindingFlags.SetProperty) != BindingFlags.Default)) }));
     }
     SecurityCheckForLateboundCalls(member, objType, objIReflect);
     MethodInfo info = (MethodInfo) member;
     if (((objType == objIReflect) || info.IsStatic) || LateBinding.DoesTargetObjectMatch(target, info))
     {
         LateBinding.VerifyObjRefPresentForInstanceCall(target, info);
         obj4 = info.Invoke(target, args);
     }
     else
     {
         obj4 = LateBinding.InvokeMemberOnIReflect(objIReflect, info, BindingFlags.InvokeMethod, target, args);
     }
     if (objState != null)
     {
         this.ReorderArgumentArray(ref args, objState);
     }
     return obj4;
 }
コード例 #18
0
 object IReflect.InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
 {
     IntSecurity.UnmanagedCode.Demand();
     return(publicIReflect.InvokeMember(name, invokeAttr, binder, publicIAccessible, args, modifiers, culture, namedParameters));
 }
コード例 #19
0
 internal static object InvokeMemberOnIReflect(IReflect objIReflect, MemberInfo member, BindingFlags flags, object target, object[] args)
 {
     VBBinder binder = new VBBinder(null);
     binder.CacheMember(member);
     return objIReflect.InvokeMember(member.Name, (BindingFlags.OptionalParamBinding | BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase) | flags, binder, target, args, null, null, null);
 }