예제 #1
0
        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);
        }
예제 #2
0
        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(
                        (IntPtr)(pNativeData.ToInt32() + ArrayDescMarshal.ComputeLength(i)),
                        typeof(ArrayBoundMarshal));
                }

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

                pNativeData = IntPtr.Zero;
            }
        }
예제 #3
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);
		}
		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;
		}