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 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; } }
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; }