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); } }
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; }
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)); }
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); } }
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)); }
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"); }
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); } } }
// 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)); } }
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); }
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); }
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); }
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)); } }
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); } }
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; } }
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);
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; }
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; }
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)); }
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); }