示例#1
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(
			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],
					(IntPtr)(ptr.ToInt32() + ArrayDescMarshal.ComputeLength(i)),
					true);
			}

			return ptr;
		}
		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);
		}