Marshal.Copy Metoda

Definicja

Kopiuje dane z tablicy zarządzanej do niezarządzanego wskaźnika pamięci lub z niezarządzanego wskaźnika pamięci do tablicy zarządzanej.

Przeciążenia

Copy(Single[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej tablicy liczb zmiennoprzecinkowych o pojedynczej precyzji do niezarządzanego wskaźnika pamięci.

Copy(IntPtr, Single[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy liczb zmiennoprzecinkowych o pojedynczej precyzji.

Copy(IntPtr, IntPtr[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do tablicy zarządzanej IntPtr .

Copy(IntPtr, Int64[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej 64-bitowej tablicy całkowitej ze znakiem.

Copy(IntPtr, Int32[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy całkowitej ze znakiem 32-bitowym.

Copy(IntPtr, Int16[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy całkowitej ze znakiem 16-bitowym.

Copy(IntPtr, Double[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy liczb zmiennoprzecinkowych o podwójnej precyzji.

Copy(IntPtr[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej tablicy zarządzanej IntPtr do niezarządzanego wskaźnika pamięci.

Copy(IntPtr, Byte[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy całkowitej bez znaku 8-bitowego.

Copy(Int64[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej 64-bitowej tablicy całkowitej ze znakiem do niezarządzanego wskaźnika pamięci.

Copy(Int32[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej 32-bitowej tablicy całkowitej ze znakiem do niezarządzanego wskaźnika pamięci.

Copy(Int16[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej 16-bitowej tablicy całkowitej ze znakiem do niezarządzanego wskaźnika pamięci.

Copy(Double[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej tablicy liczb zmiennoprzecinkowych o podwójnej precyzji do niezarządzanego wskaźnika pamięci.

Copy(Char[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej tablicy znaków do niezarządzanego wskaźnika pamięci.

Copy(IntPtr, Char[], Int32, Int32)

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy znaków.

Copy(Byte[], Int32, IntPtr, Int32)

Kopiuje dane z jednowymiarowej, zarządzanej 8-bitowej tablicy całkowitej bez znaku do niezarządzanego wskaźnika pamięci.

Copy(Single[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej, zarządzanej tablicy liczb zmiennoprzecinkowych o pojedynczej precyzji do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (float[] source, int startIndex, IntPtr destination, int length);
public static void Copy (float[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Single[]

Jednowymiarowa tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy źródłowej, w której należy uruchomić kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

source, , startIndexdestinationlub length to null.

Uwagi

Za pomocą tej metody można skopiować podzbiór jednowymiarowej tablicy zarządzanej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Single[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy liczb zmiennoprzecinkowych o pojedynczej precyzji.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, float[] destination, int startIndex, int length);
public static void Copy (IntPtr source, float[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Single[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające parametrowi source wypełniają zarządzaną tablicę niezależnie od jego przydatności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, IntPtr[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do tablicy zarządzanej IntPtr .

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, IntPtr[] destination, int startIndex, int length);
public static void Copy (IntPtr source, IntPtr[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination

IntPtr[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające parametrowi source wypełniają zarządzaną tablicę niezależnie od jego przydatności. Przed wywołaniem metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze Marshal.Copy .

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Int64[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej 64-bitowej tablicy całkowitej ze znakiem.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, long[] destination, int startIndex, int length);
public static void Copy (IntPtr source, long[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Int64[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        Int64[] 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.

            Int64[] managedArray2 = new Int64[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);
        }
    }
}

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające parametrowisource wypełniają zarządzaną tablicę niezależnie od jego przydatności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Int32[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy całkowitej ze znakiem 32-bitowym.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, int[] destination, int startIndex, int length);
public static void Copy (IntPtr source, int[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Int32[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

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

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające parametrowi source wypełniają zarządzaną tablicę niezależnie od jego przydatności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Int16[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy całkowitej ze znakiem 16-bitowym.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, short[] destination, int startIndex, int length);
public static void Copy (IntPtr source, short[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Int16[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        short[] 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.

            short[] managedArray2 = new short[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);
        }
    }
}

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające parametrowi source wypełniają zarządzaną tablicę niezależnie od jego przydatności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Double[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej tablicy liczb zmiennoprzecinkowych o podwójnej precyzji.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, double[] destination, int startIndex, int length);
public static void Copy (IntPtr source, double[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Double[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zerze w tablicy docelowej, w której należy uruchomić kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, , destinationstartIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        double[] managedArray = { 0.1, 0.2, 0.3, 0.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.

            double[] managedArray2 = new double[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);
        }
    }
}

Uwagi

Niezarządzane tablice w stylu języka C nie zawierają informacji o granicach, co uniemożliwia startIndex weryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające source parametrowi wypełnia tablicę zarządzaną niezależnie od jego użyteczności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z tablicy jednowymiarowej zarządzanej IntPtr do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (IntPtr[] source, int startIndex, IntPtr destination, int length);
public static void Copy (IntPtr[] source, int startIndex, IntPtr destination, int length);

Parametry

source

IntPtr[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, destination, startIndexlub length to null.

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej IntPtr jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Byte[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do zarządzanej, niepodpisanej tablicy całkowitej bez znaku.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, byte[] destination, int startIndex, int length);
public static void Copy (IntPtr source, byte[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Byte[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy docelowej, w której należy rozpocząć kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, destination, startIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        byte[] 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.

            byte[] managedArray2 = new byte[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);
        }
    }
}

Uwagi

Tablice niezarządzane w stylu C nie zawierają informacji o granicach, co uniemożliwia startIndex zweryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające source parametrowi wypełnia tablicę zarządzaną niezależnie od jego użyteczności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Int64[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej, zarządzanej 64-bitowej tablicy całkowitej ze znakiem do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (long[] source, int startIndex, IntPtr destination, int length);
public static void Copy (long[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Int64[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

source, startIndex, destinationlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        Int64[] 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.

            Int64[] managedArray2 = new Int64[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);
        }
    }
}

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Int32[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej tablicy całkowitej z podpisem 32-bitowym do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (int[] source, int startIndex, IntPtr destination, int length);
public static void Copy (int[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Int32[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

startIndex lub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

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

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Int16[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej, zarządzanej 16-bitowej tablicy całkowitej ze znakiem do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (short[] source, int startIndex, IntPtr destination, int length);
public static void Copy (short[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Int16[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

source, startIndex, destinationlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        short[] 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.

            short[] managedArray2 = new short[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);
        }
    }
}

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Double[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej tablicy liczb zmiennoprzecinkowych o podwójnej precyzji do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (double[] source, int startIndex, IntPtr destination, int length);
public static void Copy (double[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Double[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

source, startIndex, destinationlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        double[] managedArray = { 0.1, 0.2, 0.3, 0.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.

            double[] managedArray2 = new double[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);
        }
    }
}

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Char[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej tablicy znaków zarządzanych do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (char[] source, int startIndex, IntPtr destination, int length);
public static void Copy (char[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Char[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

startIndex, destinationlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

// Remember that the actual size of System.Char in unmanaged memory is 2.
using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        char[] managedArray = new char[1000];
        managedArray[0] = 'a';
        managedArray[1] = 'b';
        managedArray[2] = 'c';
        managedArray[3] = 'd';
        managedArray[999] = 'Z';

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

        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.

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

            Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
            Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}",
                               managedArray2[0], managedArray2[1], managedArray2[2], managedArray2[3],
                               managedArray2[999]);

            Console.WriteLine("The array was copied to unmanaged memory and back.");
        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
    }
}

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(IntPtr, Char[], Int32, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z niezarządzanego wskaźnika pamięci do tablicy znaków zarządzanych.

[System.Security.SecurityCritical]
public static void Copy (IntPtr source, char[] destination, int startIndex, int length);
public static void Copy (IntPtr source, char[] destination, int startIndex, int length);

Parametry

source
IntPtr

Wskaźnik pamięci do skopiowania.

destination
Char[]

Tablica do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy docelowej, w której należy rozpocząć kopiowanie.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

source, destination, startIndexlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do niezarządzanej pamięci, a następnie kopiuje niezarządzaną tablicę z powrotem do pamięci zarządzanej.

// Remember that the actual size of System.Char in unmanaged memory is 2.
using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        char[] managedArray = new char[1000];
        managedArray[0] = 'a';
        managedArray[1] = 'b';
        managedArray[2] = 'c';
        managedArray[3] = 'd';
        managedArray[999] = 'Z';

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

        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.

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

            Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
            Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}",
                               managedArray2[0], managedArray2[1], managedArray2[2], managedArray2[3],
                               managedArray2[999]);

            Console.WriteLine("The array was copied to unmanaged memory and back.");
        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
    }
}

Uwagi

Tablice niezarządzane w stylu C nie zawierają informacji o granicach, co uniemożliwia startIndex zweryfikowanie parametrów i length . W związku z tym niezarządzane dane odpowiadające source parametrowi wypełnia tablicę zarządzaną niezależnie od jego użyteczności. Przed wywołaniem tej metody należy zainicjować tablicę zarządzaną o odpowiednim rozmiarze.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Byte[], Int32, IntPtr, Int32)

Źródło:
Marshal.cs
Źródło:
Marshal.cs
Źródło:
Marshal.cs

Kopiuje dane z jednowymiarowej, niepodpisanej tablicy całkowitej bez znaku do niezarządzanego wskaźnika pamięci.

[System.Security.SecurityCritical]
public static void Copy (byte[] source, int startIndex, IntPtr destination, int length);
public static void Copy (byte[] source, int startIndex, IntPtr destination, int length);

Parametry

source
Byte[]

Tablica jednowymiarowa do skopiowania.

startIndex
Int32

Indeks oparty na zera w tablicy źródłowej, w której należy rozpocząć kopiowanie.

destination
IntPtr

Wskaźnik pamięci do skopiowania.

length
Int32

Liczba elementów tablicy do skopiowania.

Atrybuty

Wyjątki

startIndex i length są nieprawidłowe.

source, startIndex, destinationlub length to null.

Przykłady

Poniższy przykład kopiuje tablicę do pamięci niezarządzanej przy użyciu Copy(Byte[], Int32, IntPtr, Int32) przeciążenia, a następnie kopiuje tablicę niezarządzaną z powrotem do pamięci zarządzanej Copy(IntPtr, Byte[], Int32, Int32) przy użyciu przeciążenia.

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        byte[] 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.

            byte[] managedArray2 = new byte[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);
        }
    }
}

Uwagi

Tej metody można użyć do skopiowania podzestawu tablicy zarządzanej jednowymiarowej do niezarządzanej tablicy w stylu C.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0