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;
		}
示例#2
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 static 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 MarshalManagedToNative(arrayDesc, arrayBounds);
		}