Beispiel #1
0
        internal static void УстановитьИзмененияВМассиве(object[] оригинальныйМассив, object[] массивРеальныхОбъектов)
        {
            if (оригинальныйМассив == массивРеальныхОбъектов)
            {
                return;
            }

            for (int i = 0; i < оригинальныйМассив.Length; i++)
            {
                object obj = оригинальныйМассив[i];
                if (obj is AutoWrap)
                {
                    AutoWrap элемент = (AutoWrap)obj;
                    if (!Equals(элемент.O, массивРеальныхОбъектов[i]))
                    {
                        оригинальныйМассив[i] = ОбернутьОбъект(массивРеальныхОбъектов[i]);
                    }
                }
                else
                {
                    if (!Equals(оригинальныйМассив[i], массивРеальныхОбъектов[i]))
                    {
                        оригинальныйМассив[i] = ОбернутьОбъект(массивРеальныхОбъектов[i]);
                    }
                }
            }
        }
Beispiel #2
0
        public int Next(int celt, object[] rgVar, IntPtr pceltFetched)
        {
            if (celt == 1 && _enumerator.MoveNext())
            {
                rgVar[0] = AutoWrap.ОбернутьОбъект(_enumerator.Current);
                if (pceltFetched != IntPtr.Zero)
                {
                    Marshal.WriteInt32(pceltFetched, 1);
                }

                return(SOk);
            }

            return(SFalse);
        }
Beispiel #3
0
        public static object ОбернутьОбъект(object obj)
        {
            if (obj != null)
            {
                Type Тип = obj.GetType();

                if (Тип == typeof(IntPtr) || Тип == typeof(UIntPtr))
                {
                    return(new AutoWrap(obj));
                }

                if (Тип == typeof(Char))
                {
                    return(Convert.ToString(((char)obj)));
                }

                if (ЭтоСемерка)
                {
                    if (Тип == typeof(Decimal))
                    {
                        return(((Decimal)obj).ToString(CultureInfo.InvariantCulture));
                    }
                    if (Тип.IsPrimitive)
                    {
                        if ((Тип == typeof(Int64) || Тип == typeof(UInt32) || Тип == typeof(UInt64) || Тип == typeof(UInt16) || Тип == typeof(SByte)))
                        {
                            obj = Convert.ChangeType(obj, typeof(string), CultureInfo.InvariantCulture);
                        }
                    }
                    else if (!(Тип == typeof(DateTime) ||
                               Тип == typeof(String) ||
                               Тип == typeof(Decimal) ||
                               Тип.IsCOMObject)
                             )
                    {
                        obj = new AutoWrap(obj);
                    }
                }
                else
                {
                    if (Тип.IsArray)
                    {
                        Type ТипМассива = Тип.GetElementType();
                        if (ТипМассива != null)
                        {
                            Тип = ТипМассива;
                        }
                    }

                    if (!(Тип.IsPrimitive ||
                          Тип == typeof(Decimal) ||
                          Тип == typeof(DateTime) ||
                          Тип == typeof(String) ||
                          Тип.IsCOMObject)
                        )
                    {
                        obj = new AutoWrap(obj);
                    }
                }
            }
            return(obj);
        }