public IntPtr MarshalManagedToNative(ArrayDescMarshal arrayDesc, ArrayBoundMarshal[] arrayBounds)
        {
            int    size = ArrayDescMarshal.ComputeLength(arrayBounds.Length);
            IntPtr ptr  = Marshal.AllocHGlobal(size);

            Marshal.StructureToPtr(arrayDesc, ptr, true);
            for (int i = 0; i < arrayBounds.Length; i++)
            {
                Marshal.StructureToPtr(arrayBounds[i], ptr + ArrayDescMarshal.ComputeLength(i), true);
            }

            return(ptr);
        }
		public static IntPtr MarshalManagedToNative(ArrayDescMarshal arrayDesc, ArrayBoundMarshal[] arrayBounds)
		{
			int size = ArrayDescMarshal.ComputeLength(arrayBounds.Length);
			IntPtr ptr = Marshal.AllocHGlobal(size);

			Marshal.StructureToPtr(arrayDesc, ptr, true);
			for (int i = 0; i < arrayBounds.Length; i++)
			{
				Marshal.StructureToPtr(arrayBounds[i], ptr + ArrayDescMarshal.ComputeLength(i), true);
			}

			return ptr;
		}
        public void CleanUpNativeData(ref IntPtr pNativeData)
        {
            if (pNativeData != IntPtr.Zero)
            {
                // Destroy ArrayDescMarshal	structure
                Marshal.DestroyStructure(pNativeData, typeof(ArrayDescMarshal));

                // Destroy ArrayBound structures
                for (int i = 0; i < 16; i++)
                {
                    Marshal.DestroyStructure(pNativeData + ArrayDescMarshal.ComputeLength(i), typeof(ArrayBoundMarshal));
                }

                // Free	pointer	memory
                Marshal.FreeHGlobal(pNativeData);

                pNativeData = IntPtr.Zero;
            }
        }
Example #4
0
        public IntPtr MarshalManagedToNative(ArrayDesc descriptor)
        {
            ArrayDescMarshal arrayDesc = new ArrayDescMarshal();

            arrayDesc.DataType     = descriptor.DataType;
            arrayDesc.Scale        = (byte)descriptor.Scale;
            arrayDesc.Length       = descriptor.Length;
            arrayDesc.FieldName    = descriptor.FieldName;
            arrayDesc.RelationName = descriptor.RelationName;
            arrayDesc.Dimensions   = descriptor.Dimensions;
            arrayDesc.Flags        = descriptor.Flags;

            ArrayBoundMarshal[] arrayBounds = new ArrayBoundMarshal[descriptor.Bounds.Length];

            for (int i = 0; i < descriptor.Dimensions; i++)
            {
                arrayBounds[i].LowerBound = (short)descriptor.Bounds[i].LowerBound;
                arrayBounds[i].UpperBound = (short)descriptor.Bounds[i].UpperBound;
            }

            return(this.MarshalManagedToNative(arrayDesc, arrayBounds));
        }
        public IntPtr MarshalManagedToNative(ArrayDesc descriptor)
        {
            ArrayDescMarshal arrayDesc = new ArrayDescMarshal();

            arrayDesc.DataType		= descriptor.DataType;
            arrayDesc.Scale			= (byte)descriptor.Scale;
            arrayDesc.Length		= descriptor.Length;
            arrayDesc.FieldName		= descriptor.FieldName;
            arrayDesc.RelationName	= descriptor.RelationName;
            arrayDesc.Dimensions	= descriptor.Dimensions;
            arrayDesc.Flags			= descriptor.Flags;

            ArrayBoundMarshal[] arrayBounds = new ArrayBoundMarshal[descriptor.Bounds.Length];

            for (int i = 0; i < descriptor.Dimensions; i++)
            {
                arrayBounds[i].LowerBound = (short)descriptor.Bounds[i].LowerBound;
                arrayBounds[i].UpperBound = (short)descriptor.Bounds[i].UpperBound;
            }

            return this.MarshalManagedToNative(arrayDesc, arrayBounds);
        }