Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
MSDN Library

Marshal.Copy Method (Int32[], Int32, IntPtr, Int32)

Copies data from a one-dimensional, managed 32-bit signed integer array to an unmanaged memory pointer.

Namespace:  System.Runtime.InteropServices
Assemblies:   System.Runtime.InteropServices (in System.Runtime.InteropServices.dll)
  mscorlib (in mscorlib.dll)

public static void Copy(
	int[] source,
	int startIndex,
	IntPtr destination,
	int length
)

Parameters

source
Type: System.Int32[]

The one-dimensional array to copy from.

startIndex
Type: System.Int32

The zero-based index in the source array where copying should start.

destination
Type: System.IntPtr

The memory pointer to copy to.

length
Type: System.Int32

The number of array elements to copy.

ExceptionCondition
ArgumentOutOfRangeException

startIndex and length are not valid.

ArgumentNullException

startIndex or length is null.

You can use this method to copy a subset of a one-dimensional managed array to an unmanaged C-style array.

The following example copies an array to unmanaged memory and then copies the unmanaged array back to managed memory.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array. 
        int[] managedArray = { 1, 2, 3, 4 };

        // Initialize unmanaged memory to hold the array. 
        int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length;

        IntPtr pnt = Marshal.AllocHGlobal(size);

        try
        {
            // Copy the array to unmanaged memory.
            Marshal.Copy(managedArray, 0, pnt, managedArray.Length);

            // Copy the unmanaged array back to another managed array. 

            int[] managedArray2 = new int[managedArray.Length];

            Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);

            Console.WriteLine("The array was copied to unmanaged memory and back.");

        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }



    }

}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library

  • SecurityCriticalAttribute 

    requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Show:
© 2015 Microsoft