Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private void ВнешнееСобытиеСПараметром(object value)
 {
     if (СобытиеСПараметром != null && _sc != null && value != null)
     {
         _sc.Send(d => СобытиеСПараметром(AutoWrap.ОбернутьОбъект(value)), null);
     }
 }
Esempio n. 3
0
        // Получаем масив элементов определенного типа
        // Тип выводится по первому элементу с индексом 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);
            }
        }
Esempio n. 4
0
        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);
     }
 }
Esempio n. 6
0
        public object MethodInfo_Invoke(object методИнфо, object объект, params object[] argsOrig)
        {
            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig);
            var      mf   = (MethodInfo)(((AutoWrap)методИнфо).O);

            return(AutoWrap.ОбернутьОбъект(mf.Invoke(ПолучитьРеальныйОбъект(объект), args)));
        }
Esempio n. 7
0
        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._свойства;
 }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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());
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
            }
        }
Esempio n. 13
0
        public object СоздатьОбъект(object тип, params object[] argOrig)
        {
            var res = ТипДляСоздатьОбъект(тип);

            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig);
            return(AutoWrap.ОбернутьОбъект(System.Activator.CreateInstance(res, args)));
        }
Esempio n. 14
0
        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()));
        }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
        public object СоздатьОберткуДляСобытий77(object объект, object глобальныйКонтекст)
        {
            object еальныйОбъект = AutoWrap.ПолучитьРеальныйОбъект(объект);
            var    функция       = ПолучитьMethodInfoОберткиСобытий("СоздательОбертки77", еальныйОбъект);
            object обертка       = функция.Invoke(null, new[] { глобальныйКонтекст, еальныйОбъект });

            return(AutoWrap.ОбернутьОбъект(обертка));
        }
Esempio n. 17
0
        public object ВыполнитьДелегат(object делегат, params object[] argsOrig)
        {
            Delegate obj = (Delegate)ПолучитьРеальныйОбъект(делегат);

            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig);

            return(AutoWrap.ОбернутьОбъект(obj.DynamicInvoke(args)));
        }
Esempio n. 18
0
        public object СоздатьОберткуДляСобытий(object объект)
        {
            object еальныйОбъект = AutoWrap.ПолучитьРеальныйОбъект(объект);
            var    функция       = ПолучитьMethodInfoОберткиСобытий("СоздательОбертки", еальныйОбъект);
            object обертка       = функция.Invoke(null, new[] { this, еальныйОбъект });

            return(обертка);
        }
Esempio n. 19
0
        public void ОчиститьСобытияОбъекта(Object obj)
        {
            if (obj == null)
            {
                return;
            }

            ОчисткаСсылокНаСобытия.Очистить(AutoWrap.ПолучитьРеальныйОбъект(obj));
        }
Esempio n. 20
0
        public object ОбернутьОбъект(object объект)
        {
            if (объект is AutoWrap)
            {
                return(объект);
            }

            return(AutoWrap.ОбернутьОбъект(объект));
        }
Esempio n. 21
0
        public void ЗакрытьРесурс(Object oбъект)
        {
            object объект = AutoWrap.ПолучитьРеальныйОбъект(oбъект);

            if (объект is IDisposable d)
            {
                d.Dispose();
            }
        }
Esempio n. 22
0
        public object ПолучитьТипизированныйПеречислитель(object счетчик, object тип)
        {
            var cur = (IEnumerable)AutoWrap.ПолучитьРеальныйОбъект(счетчик);

            Type type = (Type)AutoWrap.ПолучитьРеальныйОбъект(тип);
            var  res  = new ТипизированныйЭнумератор(cur.GetEnumerator(), type);

            return(new MyEnumerableClass(res));
        }
Esempio n. 23
0
        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);
            }
        }
Esempio n. 24
0
        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);
        }
Esempio n. 26
0
        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);
        }
Esempio n. 27
0
        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());
        }
Esempio n. 28
0
        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);
            }
        }
Esempio n. 29
0
        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));
        }
Esempio n. 30
0
        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);
        }