Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método Marshal.Copy (IntPtr, Byte[], Int32, Int32)

 

Publicado: agosto de 2016

Copia os dados de um ponteiro de memória não gerenciada para uma matriz gerenciada de inteiro sem sinal de 8 bits.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

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

Parâmetros

source
Type: System.IntPtr

O ponteiro de memória do qual copiar.

destination
Type: System.Byte[]

A matriz para a qual copiar.

startIndex
Type: System.Int32

O índice baseado em zero na matriz de destino em que a cópia deve iniciar.

length
Type: System.Int32

O número de elementos da matriz a serem copiados.

Exception Condition
ArgumentNullException

source, destination, startIndex ou length é null.

Não gerenciados, matrizes de estilo C não contêm informações de limites, o que impede que o startIndex e length parâmetros sejam validados. Portanto, os dados não gerenciados correspondente a source parâmetro preenche a matriz gerenciada, independentemente de sua utilidade. Você deve inicializar a matriz gerenciada com o tamanho apropriado antes de chamar esse método.

O exemplo a seguir copia uma matriz para a memória não gerenciada e, em seguida, copia a matriz não gerenciada para memória gerenciada.

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



    }

}

SecurityCriticalAttribute

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

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao início
Mostrar: