Marshal.WriteIntPtr Método

Definição

Escreve um valor inteiro de tamanho nativo de processador na memória não gerida. Os inteiros de 32 bits são escritos em sistemas de 32 bits, e os inteiros de 64 bits são escritos em sistemas de 64 bits. A escrita em locais de memória desalinhados é suportada.

Sobrecargas

Name Description
WriteIntPtr(IntPtr, IntPtr)

Escreve um valor inteiro de tamanho nativo do processador na memória não gerida.

WriteIntPtr(IntPtr, Int32, IntPtr)

Escreve um valor inteiro de tamanho nativo de processador numa memória não gerida a um deslocamento especificado.

WriteIntPtr(Object, Int32, IntPtr)
Obsoleto.

Escreve um valor inteiro de tamanho nativo de processador na memória não gerida.

WriteIntPtr(IntPtr, IntPtr)

Escreve um valor inteiro de tamanho nativo do processador na memória não gerida.

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

Parâmetros

ptr
IntPtr

nativeint

O endereço na memória não gerida para escrever.

val
IntPtr

nativeint

O valor a escrever.

Atributos

Exceções

ptr não é um formato reconhecido.

-ou-

ptr é null.

-ou-

ptr é inválido.

Exemplos

O exemplo seguinte demonstra como ler e escrever num array não gerido usando os ReadIntPtr métodos e.WriteIntPtr

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

Observações

WriteIntPtr permite a interação direta com um array de estilo IntPtr C não gerido, eliminando o custo de copiar um array inteiro não gerido (usando Marshal.Copy) para um array gerido separado antes de definir os seus valores de elemento.

A escrita em locais de memória desalinhados é suportada.

Ver também

Aplica-se a

WriteIntPtr(IntPtr, Int32, IntPtr)

Escreve um valor inteiro de tamanho nativo de processador numa memória não gerida a um deslocamento especificado.

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

Parâmetros

ptr
IntPtr

nativeint

O endereço base na memória não gerida para escrever.

ofs
Int32

Um deslocamento adicional de byte, que é adicionado ao ptr parâmetro antes da escrita.

val
IntPtr

nativeint

O valor a escrever.

Atributos

Exceções

O endereço base (ptr) mais o byte offset (ofs) produz um endereço nulo ou inválido.

Exemplos

O exemplo seguinte demonstra como ler e escrever num array não gerido usando os ReadIntPtr métodos e.WriteIntPtr

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

Observações

Este método escreve um inteiro de 32 bits em sistemas de 32 bits e um inteiro de 64 bits em sistemas de 64 bits.

WriteIntPtr permite a interação direta com um array de estilo IntPtr C não gerido, eliminando o custo de copiar um array inteiro não gerido (usando Marshal.Copy) para um array gerido separado antes de definir os seus valores de elemento.

A escrita em locais de memória desalinhados é suportada.

Ver também

Aplica-se a

WriteIntPtr(Object, Int32, IntPtr)

Atenção

WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.

Escreve um valor inteiro de tamanho nativo de processador na memória não gerida.

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);
public static void WriteIntPtr(object ptr, int ofs, IntPtr val);
[System.Security.SecurityCritical]
public static void WriteIntPtr(object ptr, int ofs, IntPtr val);
[System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")]
public static void WriteIntPtr(object ptr, int ofs, IntPtr val);
[<System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")>]
[<System.Security.SecurityCritical>]
static member WriteIntPtr : obj * int * nativeint -> unit
static member WriteIntPtr : obj * int * nativeint -> unit
[<System.Security.SecurityCritical>]
static member WriteIntPtr : obj * int * nativeint -> unit
[<System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")>]
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 base na memória não gerida do objeto alvo.

ofs
Int32

Um deslocamento adicional de byte, que é adicionado ao ptr parâmetro antes da escrita.

val
IntPtr

nativeint

O valor a escrever.

Atributos

Exceções

O endereço base (ptr) mais o byte offset (ofs) produz um endereço nulo ou inválido.

ptr é um ArrayWithOffset objeto. Este método não aceita ArrayWithOffset parâmetros.

Observações

WriteIntPtr permite a interação direta com um array de bytes não gerido no estilo C, eliminando o custo de copiar um array inteiro não gerido (usando Marshal.Copy) para um array gerido separado antes de definir os valores dos seus elementos.

A escrita em locais de memória desalinhados é suportada.

Ver também

Aplica-se a