Marshal.WriteIntPtr Método

Definição

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada.Writes a processor native-sized integer value to unmanaged memory. Inteiros de 32 bits são gravados em sistemas de 32 bits e inteiros de 64 bits são gravados em sistemas de 64 bits.32-bit integers are written on 32-bit systems, and 64-bit integers are written on 64-bit systems. Há suporte para gravar em locais de memória não alinhados.Writing to unaligned memory locations is supported.

Sobrecargas

WriteIntPtr(IntPtr, IntPtr)

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada.Writes a processor native sized integer value into unmanaged memory.

WriteIntPtr(IntPtr, Int32, IntPtr)

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada em um deslocamento especificado.Writes a processor native-sized integer value to unmanaged memory at a specified offset.

WriteIntPtr(Object, Int32, IntPtr)

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada.Writes a processor native sized integer value to unmanaged memory.

WriteIntPtr(IntPtr, IntPtr)

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada.Writes a processor native sized integer value into unmanaged memory.

public:
 static void WriteIntPtr(IntPtr ptr, IntPtr val);
[System.Security.SecurityCritical]
public static void WriteIntPtr (IntPtr ptr, IntPtr val);
static member WriteIntPtr : nativeint * nativeint -> unit
Public Shared Sub WriteIntPtr (ptr As IntPtr, val As IntPtr)

Parâmetros

ptr
IntPtr

O endereço a ser gravado na memória não gerenciada.The address in unmanaged memory to write to.

val
IntPtr

O valor a ser gravado.The value to write.

Atributos

Exceções

ptr não é um formato reconhecido.ptr is not a recognized format.

- ou --or- ptr é null.ptr is null.

- ou --or- ptr é inválido.ptr is invalid.

Exemplos

O exemplo a seguir demonstra como ler e gravar em uma matriz não gerenciada usando os métodos ReadIntPtr e WriteIntPtr.The following example demonstrates how to read and write to an unmanaged array using the ReadIntPtr and WriteIntPtr methods.

static void ReadWriteIntPtr()
{
    // Allocate unmanaged memory. 
    int elementSize = Marshal.SizeOf(typeof(IntPtr));
    IntPtr unmanagedArray = Marshal.AllocHGlobal(10 * elementSize);

    // Set the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Marshal.WriteIntPtr(unmanagedArray, i * elementSize, ((IntPtr)(i + 1)));
    }
    Console.WriteLine("Unmanaged memory written.");

    Console.WriteLine("Reading unmanaged memory:");
    // Print the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(Marshal.ReadIntPtr(unmanagedArray, i * elementSize));
    }

    Marshal.FreeHGlobal(unmanagedArray);

    Console.WriteLine("Done. Press Enter to continue.");
    Console.ReadLine();
}
Sub ReadWriteIntPtr()
    ' Allocate unmanaged memory.
    Dim elementSize As Integer = Marshal.SizeOf(GetType(IntPtr))
    Dim unmanagedArray As IntPtr = Marshal.AllocHGlobal(10 * elementSize)

    ' Set the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Marshal.WriteIntPtr(unmanagedArray, i * elementSize, CType(i + 1, IntPtr))
    Next i
    Console.WriteLine("Unmanaged memory written.")

    Console.WriteLine("Reading unmanaged memory:")
    ' Print the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Console.WriteLine(Marshal.ReadIntPtr(unmanagedArray, i * elementSize))
    Next i

    Marshal.FreeHGlobal(unmanagedArray)

    Console.WriteLine("Done. Press Enter to continue.")
    Console.ReadLine()
End Sub

Comentários

WriteIntPtr habilita a interação direta com uma matriz de IntPtr de estilo C não gerenciada, eliminando a despesa de copiar uma matriz não gerenciada inteira (usando Marshal.Copy) para uma matriz gerenciada separada antes de definir seus valores de elemento.WriteIntPtr enables direct interaction with an unmanaged C-style IntPtr array, eliminating the expense of copying an entire unmanaged array (using Marshal.Copy) to a separate managed array before setting its element values.

Há suporte para gravar em locais de memória não alinhados.Writing to unaligned memory locations is supported.

Segurança

SecurityCriticalAttribute
requer confiança total para o chamador imediato.requires full trust for the immediate caller. Este membro não pode ser usado pelo código transparente ou parcialmente confiável.This member cannot be used by partially trusted or transparent code.

Veja também

WriteIntPtr(IntPtr, Int32, IntPtr)

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada em um deslocamento especificado.Writes a processor native-sized integer value to unmanaged memory at a specified offset.

public:
 static void WriteIntPtr(IntPtr ptr, int ofs, IntPtr val);
[System.Security.SecurityCritical]
public static void WriteIntPtr (IntPtr ptr, int ofs, IntPtr val);
static member WriteIntPtr : nativeint * int * nativeint -> unit
Public Shared Sub WriteIntPtr (ptr As IntPtr, ofs As Integer, val As IntPtr)

Parâmetros

ptr
IntPtr

O endereço básico na memória não gerenciada no qual gravar.The base address in unmanaged memory to write to.

ofs
Int32

Um deslocamento de byte adicional, que é adicionado para o parâmetro ptr antes de gravar.An additional byte offset, which is added to the ptr parameter before writing.

val
IntPtr

O valor a ser gravado.The value to write.

Atributos

Exceções

O endereço básico (ptr) e o deslocamento de byte (ofs) produz um endereço nulo ou inválido.Base address (ptr) plus offset byte (ofs) produces a null or invalid address.

Exemplos

O exemplo a seguir demonstra como ler e gravar em uma matriz não gerenciada usando os métodos ReadIntPtr e WriteIntPtr.The following example demonstrates how to read and write to an unmanaged array using the ReadIntPtr and WriteIntPtr methods.

static void ReadWriteIntPtr()
{
    // Allocate unmanaged memory. 
    int elementSize = Marshal.SizeOf(typeof(IntPtr));
    IntPtr unmanagedArray = Marshal.AllocHGlobal(10 * elementSize);

    // Set the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Marshal.WriteIntPtr(unmanagedArray, i * elementSize, ((IntPtr)(i + 1)));
    }
    Console.WriteLine("Unmanaged memory written.");

    Console.WriteLine("Reading unmanaged memory:");
    // Print the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(Marshal.ReadIntPtr(unmanagedArray, i * elementSize));
    }

    Marshal.FreeHGlobal(unmanagedArray);

    Console.WriteLine("Done. Press Enter to continue.");
    Console.ReadLine();
}
Sub ReadWriteIntPtr()
    ' Allocate unmanaged memory.
    Dim elementSize As Integer = Marshal.SizeOf(GetType(IntPtr))
    Dim unmanagedArray As IntPtr = Marshal.AllocHGlobal(10 * elementSize)

    ' Set the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Marshal.WriteIntPtr(unmanagedArray, i * elementSize, CType(i + 1, IntPtr))
    Next i
    Console.WriteLine("Unmanaged memory written.")

    Console.WriteLine("Reading unmanaged memory:")
    ' Print the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Console.WriteLine(Marshal.ReadIntPtr(unmanagedArray, i * elementSize))
    Next i

    Marshal.FreeHGlobal(unmanagedArray)

    Console.WriteLine("Done. Press Enter to continue.")
    Console.ReadLine()
End Sub

Comentários

Esse método grava um inteiro de 32 bits em sistemas de 32 bits e um inteiro de 64 bits em sistemas de 64 bits.This method writes a 32 bit integer on 32 bit systems, and a 64 bit integer on 64 bit systems.

WriteIntPtr habilita a interação direta com uma matriz de IntPtr de estilo C não gerenciada, eliminando a despesa de copiar uma matriz não gerenciada inteira (usando Marshal.Copy) para uma matriz gerenciada separada antes de definir seus valores de elemento.WriteIntPtr enables direct interaction with an unmanaged C-style IntPtr array, eliminating the expense of copying an entire unmanaged array (using Marshal.Copy) to a separate managed array before setting its element values.

Há suporte para gravar em locais de memória não alinhados.Writing to unaligned memory locations is supported.

Segurança

SecurityCriticalAttribute
requer confiança total para o chamador imediato.requires full trust for the immediate caller. Este membro não pode ser usado pelo código transparente ou parcialmente confiável.This member cannot be used by partially trusted or transparent code.

Veja também

WriteIntPtr(Object, Int32, IntPtr)

Aviso

Esta API agora é obsoleta.

Grava um valor de inteiro de tamanho nativo de processador na memória não gerenciada.Writes a processor native sized integer value to unmanaged memory.

public:
 static void WriteIntPtr(System::Object ^ ptr, int ofs, IntPtr val);
[System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")]
[System.Security.SecurityCritical]
public static void WriteIntPtr (object ptr, int ofs, IntPtr val);
static member WriteIntPtr : obj * int * nativeint -> unit
Public Shared Sub WriteIntPtr (ptr As Object, ofs As Integer, val As IntPtr)

Parâmetros

ptr
Object

O endereço básico em memória não gerenciada do objeto de destino.The base address in unmanaged memory of the target object.

ofs
Int32

Um deslocamento de byte adicional, que é adicionado para o parâmetro ptr antes de gravar.An additional byte offset, which is added to the ptr parameter before writing.

val
IntPtr

O valor a ser gravado.The value to write.

Atributos

Exceções

O endereço básico (ptr) e o deslocamento de byte (ofs) produz um endereço nulo ou inválido.Base address (ptr) plus offset byte (ofs) produces a null or invalid address.

ptr é um objeto ArrayWithOffset.ptr is an ArrayWithOffset object. Esse método não aceita parâmetros ArrayWithOffset.This method does not accept ArrayWithOffset parameters.

Comentários

WriteIntPtr habilita a interação direta com uma matriz de bytes em estilo C não gerenciado, eliminando a despesa de copiar uma matriz não gerenciada inteira (usando Marshal.Copy) para uma matriz gerenciada separada antes de definir seus valores de elemento.WriteIntPtr enables direct interaction with an unmanaged C-style byte array, eliminating the expense of copying an entire unmanaged array (using Marshal.Copy) to a separate managed array before setting its element values.

Há suporte para gravar em locais de memória não alinhados.Writing to unaligned memory locations is supported.

Segurança

SecurityCriticalAttribute
requer confiança total para o chamador imediato.requires full trust for the immediate caller. Este membro não pode ser usado pelo código transparente ou parcialmente confiável.This member cannot be used by partially trusted or transparent code.

Veja também

Aplica-se a