Пример #1
0
        public object[] GetArray(TypeCollection types)
        {
            UInt16 arrayTypeCrc = ValueNative.GetArrayType(m_nativeInstance);
            Type   arrayType    = types.FindTypeByCrc(arrayTypeCrc);

            if (arrayType == null || arrayType.ManagedType == null)
            {
                return(null);
            }

            int elementSize = ValueNative.GetArrayElementSize(m_nativeInstance);

            if (elementSize != Marshal.SizeOf(arrayType.ManagedType))
            {
                return(null);
            }

            int length = ValueNative.GetArrayLength(m_nativeInstance);

            object[] array = new object[length];

            IntPtr arrayData = ValueNative.GetArrayData(m_nativeInstance);

            for (int i = 0; i < length; i++)
            {
                array[i]   = Marshal.PtrToStructure(arrayData, arrayType.ManagedType);
                arrayData += elementSize;
            }

            return(array);
        }