public object ВыполнитьМетод(object objOrig, string имяМетода, params object[] argsOrig) { object res; object obj = objOrig; object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig); if (obj is AutoWrap Объект) { obj = Объект.O; if (Объект.ЭтоТип) { res = AutoWrap.ОбернутьОбъект(Объект.T.InvokeMember(имяМетода, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, args)); AutoWrap.УстановитьИзмененияВМассиве(argsOrig, args); return(res); } } Type T = obj.GetType(); res = AutoWrap.ОбернутьОбъект(T.InvokeMember(имяМетода, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, args)); AutoWrap.УстановитьИзмененияВМассиве(argsOrig, args); return(res); }
private void ВнешнееСобытиеСПараметром(object value) { if (СобытиеСПараметром != null && _sc != null && value != null) { _sc.Send(d => СобытиеСПараметром(AutoWrap.ОбернутьОбъект(value)), null); } }
// Получаем масив элементов определенного типа // Тип выводится по первому элементу с индексом 0 // Пример использования // ТипыПараметров=ъ(Врап.ТипМассив(IParentNode.ПолучитьСсылку(),String.ПолучитьСсылку())); public object ТипМассив(params object[] argOrig) { if (!(argOrig != null && argOrig.Length > 0)) { return(new object[0]); } argOrig = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig); var Тип = argOrig[0].GetType(); var ti = Тип.GetTypeInfo(); var TypeRes = typeof(List <>).MakeGenericType(Тип); var res = System.Activator.CreateInstance(TypeRes); var mi = TypeRes.GetTypeInfo().GetMethod("Add"); var mi2 = TypeRes.GetTypeInfo().GetMethod("ToArray"); foreach (var str in argOrig) { if (mi != null && str != null && ti.IsInstanceOfType(str)) { mi.Invoke(res, new[] { str }); } } if (mi2 != null) { return(AutoWrap.ОбернутьОбъект(mi2.Invoke(res, new object[0]))); } else { return(null); } }
public static void IteratorNext(BinaryReader br, BinaryWriter bw) { if (!GetAW(br, bw, out var autoWrap)) { return; } try { var enumerator = (System.Collections.IEnumerator)autoWrap.Object; var res = enumerator.MoveNext(); bw.Write(true); if (!res) { AutoWrap.ObjectsList.RemoveKey(autoWrap.IndexInStorage); bw.Write(false); return; } bw.Write(true); WorkWithVariant.WriteObject(AutoWrap.WrapObject(enumerator.Current), bw); } catch (Exception e) { SetError(AutoWrap.GetExceptionString("Ошибка итератора", "", e), bw); } }
public void Оповестить(object задача, object данныеКЗадаче) { if (_sc != null && задача != null && данныеКЗадаче != null) { _sc.Post(d => ПриОкончанииВыполненияЗадачи(AutoWrap.ОбернутьОбъект(задача), данныеКЗадаче), null); } }
public object MethodInfo_Invoke(object методИнфо, object объект, params object[] argsOrig) { object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig); var mf = (MethodInfo)(((AutoWrap)методИнфо).O); return(AutoWrap.ОбернутьОбъект(mf.Invoke(ПолучитьРеальныйОбъект(объект), args))); }
public object Or(params object[] параметры1) { if (параметры1.Length == 0) { return(null); } object[] параметры = AutoWrap.ПолучитьМассивРеальныхОбъектов(параметры1); var парам = параметры[0]; var тип = парам.GetType(); long res = (long)Convert.ChangeType(парам, typeof(long)); for (int i = 1; i < параметры.Length; i++) { res |= (long)Convert.ChangeType(параметры[i], typeof(long)); } if (тип.IsEnum) { var ТипЗначений = Enum.GetUnderlyingType(тип); var number = Convert.ChangeType(res, ТипЗначений); return(AutoWrap.ОбернутьОбъект(Enum.ToObject(тип, number))); } return(AutoWrap.ОбернутьОбъект(Convert.ChangeType(res, тип))); }
internal static void ПрописатьПоля(AutoWrap объект, ДанныеДляТипа res) { объект.Поля = res._поля; объект.Мемберы = res._мемберы; объект.Методы = res._методы; объект.Свойства = res._свойства; }
public static void CallAsDelegate(BinaryReader br, BinaryWriter bw) { object result; if (!GetAW(br, bw, out var autoWrap)) { return; } var args = GetArrayParams(br); try { var del = (Delegate)autoWrap.Object; result = del.DynamicInvoke(args); } catch (Exception e) { SetError(AutoWrap.GetExceptionString($"Ошибка вызова делегата Target = ", "", e), bw); return; } bw.Write(true); WorkWithVariant.WriteObject(AutoWrap.WrapObject(result), bw); }
public object[] МассивИзЭнумератора(object счетчик, object тип) { var cur = (IEnumerable)AutoWrap.ПолучитьРеальныйОбъект(счетчик); var list = new List <object>(); Type type = (Type)AutoWrap.ПолучитьРеальныйОбъект(тип); ДанныеДляТипа данныеДляТипа = ДанныеДляТипа.ПолучитьДанныеДляТипа(type); foreach (var str in cur) { if ((str == null) || !type.IsAssignableFrom(str.GetType())) { list.Add(null); continue; } var res = new AutoWrap(str, type); ДанныеДляТипа.ПрописатьПоля(res, данныеДляТипа); list.Add(res); } return(list.ToArray()); }
public static bool CallAsFuncAll(BinaryReader br, BinaryWriter bw, out object result, bool writeResult) { result = null; if (!GetAW(br, bw, out var autoWrap)) { return(false); } string methodName = br.ReadString(); var args = GetArrayParams(br); List <int> changeParameters = new List <int>(); var res = autoWrap.TryInvokeMember(methodName, args, out result, changeParameters, out var error); if (!res) { SetError(error, bw); return(false); } if (writeResult) { bw.Write(true); WorkWithVariant.WriteObject(AutoWrap.WrapObject(result), bw); WriteChangeParams(bw, args, changeParameters); } return(true); }
public int Next(int celt, object[] rgVar, IntPtr pceltFetched) { if (celt == 1 && _enumerator.MoveNext()) { var current = _enumerator.Current; AutoWrap res = null; if (!((current == null) || !_type.IsAssignableFrom(current.GetType()))) { res = new AutoWrap(current, _type); ДанныеДляТипа.ПрописатьПоля(res, _данныеДляТипа); } rgVar[0] = res; if (pceltFetched != IntPtr.Zero) { Marshal.WriteInt32(pceltFetched, 1); } return(SOk); } else { return(SFalse); } }
public object СоздатьОбъект(object тип, params object[] argOrig) { var res = ТипДляСоздатьОбъект(тип); object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig); return(AutoWrap.ОбернутьОбъект(System.Activator.CreateInstance(res, args))); }
public object СоздатьКлиентаWcfConfigFile(string имяФайла, object channel, string endpointConfigurationName, object endpointAddress = null, string userName = null, string password = null) { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = имяФайла }; Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration( fileMap, ConfigurationUserLevel.None); Type ТипКанала = ТипДляСоздатьОбъект(channel); Type type = typeof(ConfigurationChannelFactory <>); Type constructed = type.MakeGenericType(ТипКанала); dynamic factory1 = System.Activator.CreateInstance(constructed, endpointConfigurationName, newConfiguration, AutoWrap.ПолучитьРеальныйОбъект(endpointAddress) ); if (!String.IsNullOrWhiteSpace(userName)) { factory1.Credentials.UserName.UserName = userName; factory1.Credentials.UserName.Password = password; } return(AutoWrap.ОбернутьОбъект(factory1.CreateChannel())); }
public static void GetIndex(BinaryReader br, BinaryWriter bw) { if (!GetAW(br, bw, out var autoWrap)) { return; } var parameters = GetArrayParams(br); string methodName = "get_Item"; if (typeof(Array).IsAssignableFrom(autoWrap.Type)) { methodName = "GetValue"; } var changeParams = new List <int>(); var res = autoWrap.TryInvokeMember(methodName, parameters, out var result, changeParams, out var error); if (!res) { SetError(error, bw); } else { bw.Write(true); WorkWithVariant.WriteObject(AutoWrap.WrapObject(result), bw); } }
public object СоздатьОберткуДляСобытий77(object объект, object глобальныйКонтекст) { object еальныйОбъект = AutoWrap.ПолучитьРеальныйОбъект(объект); var функция = ПолучитьMethodInfoОберткиСобытий("СоздательОбертки77", еальныйОбъект); object обертка = функция.Invoke(null, new[] { глобальныйКонтекст, еальныйОбъект }); return(AutoWrap.ОбернутьОбъект(обертка)); }
public object ВыполнитьДелегат(object делегат, params object[] argsOrig) { Delegate obj = (Delegate)ПолучитьРеальныйОбъект(делегат); object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig); return(AutoWrap.ОбернутьОбъект(obj.DynamicInvoke(args))); }
public object СоздатьОберткуДляСобытий(object объект) { object еальныйОбъект = AutoWrap.ПолучитьРеальныйОбъект(объект); var функция = ПолучитьMethodInfoОберткиСобытий("СоздательОбертки", еальныйОбъект); object обертка = функция.Invoke(null, new[] { this, еальныйОбъект }); return(обертка); }
public void ОчиститьСобытияОбъекта(Object obj) { if (obj == null) { return; } ОчисткаСсылокНаСобытия.Очистить(AutoWrap.ПолучитьРеальныйОбъект(obj)); }
public object ОбернутьОбъект(object объект) { if (объект is AutoWrap) { return(объект); } return(AutoWrap.ОбернутьОбъект(объект)); }
public void ЗакрытьРесурс(Object oбъект) { object объект = AutoWrap.ПолучитьРеальныйОбъект(oбъект); if (объект is IDisposable d) { d.Dispose(); } }
public object ПолучитьТипизированныйПеречислитель(object счетчик, object тип) { var cur = (IEnumerable)AutoWrap.ПолучитьРеальныйОбъект(счетчик); Type type = (Type)AutoWrap.ПолучитьРеальныйОбъект(тип); var res = new ТипизированныйЭнумератор(cur.GetEnumerator(), type); return(new MyEnumerableClass(res)); }
private static void WriteChangeParams(BinaryWriter bw, object[] args, List <int> changeParameters) { bw.Write(changeParameters.Count); foreach (var i in changeParameters) { bw.Write(i); WorkWithVariant.WriteObject(AutoWrap.WrapObject(args[i]), bw); } }
public string ВСтроку(object valueOrig) { if (valueOrig == null) { return("неопределено"); } var res = AutoWrap.ПолучитьРеальныйОбъект(valueOrig); return(res.ToString()); }
internal static void Инициализировать(AutoWrap объект) { if (объект.ЭтоТип || объект.ЭтоExpandoObject) { return; } ДанныеДляТипа res = ПолучитьДанныеДляТипа(объект.T); ПрописатьПоля(объект, res); }
internal void SendEvent(Guid eventKey, object result) { MemoryStream stream = new MemoryStream(); var bw = new BinaryWriter(stream); bw.Write((byte)1); bw.Write(eventKey.ToByteArray()); WorkWithVariant.WriteObject(AutoWrap.WrapObject(result), bw); bw.Flush(); SendStream(stream); }
public object[] МассивИзЭнумератора2(object счетчик) { var cur = (IEnumerable)AutoWrap.ПолучитьРеальныйОбъект(счетчик); var list = new List <object>(); foreach (var str in cur) { list.Add(AutoWrap.ОбернутьОбъект(str)); } return(list.ToArray()); }
public void GetInfoFromObject(Object obj) { AutoWrap res = (AutoWrap)obj; MessageBox.Show(res.T.AssemblyQualifiedName); MessageBox.Show(res.O.ToString()); foreach (MethodInfo str in res.Методы) { MessageBox.Show(str.Name); } }
public object СоздатьДелегат(object типДелегата, object методИнфо, Object oбъект, params object[] argOrig) { object объект = AutoWrap.ПолучитьРеальныйОбъект(oбъект); MethodInfo объектМетодИнфо = (MethodInfo)AutoWrap.ПолучитьРеальныйОбъект(методИнфо); Type genType = (Type)AutoWrap.ПолучитьРеальныйОбъект(типДелегата); var типы = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig).Cast <Type>().ToArray(); Type constructed = genType.MakeGenericType(типы); var res = Delegate.CreateDelegate(constructed, объект, объектМетодИнфо); return(new AutoWrap(res)); }
internal void SendAsyncMessage(bool successfully, object result) { MemoryStream stream = new MemoryStream(); var bw = new BinaryWriter(stream); bw.Write((byte)0); bw.Write(_key.ToByteArray()); bw.Write(successfully); WorkWithVariant.WriteObject(AutoWrap.WrapObject(result), bw); bw.Flush(); SendStream(stream); }