Marshal.ReadIntPtr Método

Definição

Lê um inteiro do tamanho nativo do processador da memória não gerenciada. Há suporte para leitura de locais de memória não assinados.

Sobrecargas

Nome Description
ReadIntPtr(IntPtr, Int32)

Lê um inteiro de tamanho nativo do processador em um determinado deslocamento da memória não gerenciada.

ReadIntPtr(Object, Int32)
Obsoleto.

Lê um inteiro do tamanho nativo do processador da memória não gerenciada.

ReadIntPtr(IntPtr)

Lê um inteiro do tamanho nativo do processador da memória não gerenciada.

ReadIntPtr(IntPtr, Int32)

Lê um inteiro de tamanho nativo do processador em um determinado deslocamento da memória não gerenciada.

public:
 static IntPtr ReadIntPtr(IntPtr ptr, int ofs);
[System.Security.SecurityCritical]
public static IntPtr ReadIntPtr(IntPtr ptr, int ofs);
public static IntPtr ReadIntPtr(IntPtr ptr, int ofs);
[<System.Security.SecurityCritical>]
static member ReadIntPtr : nativeint * int -> nativeint
static member ReadIntPtr : nativeint * int -> nativeint
Public Shared Function ReadIntPtr (ptr As IntPtr, ofs As Integer) As IntPtr

Parâmetros

ptr
IntPtr

nativeint

O endereço base na memória não gerenciada da qual ler.

ofs
Int32

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

Retornos

IntPtr

nativeint

O inteiro lido da memória não gerenciada no deslocamento fornecido.

Atributos

Exceções

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

Exemplos

O exemplo a seguir demonstra como ler e gravar em uma matriz não gerenciada usando os métodos e WriteIntPtr os ReadIntPtr métodos.

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

ReadIntPtr permite a interação direta com uma matriz de estilo IntPtr 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 ler seus valores de elemento.

Há suporte para leitura de locais de memória não assinados.

Confira também

Aplica-se a

ReadIntPtr(Object, Int32)

Cuidado

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

Lê um inteiro do tamanho nativo do processador da memória não gerenciada.

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

Parâmetros

ptr
Object

O endereço base na memória não gerenciada do objeto de origem.

ofs
Int32

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

Retornos

IntPtr

nativeint

O inteiro lido da memória não gerenciada no deslocamento fornecido.

Atributos

Exceções

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

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

Comentários

ReadIntPtr permite a interação direta com uma matriz de estilo IntPtr 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 ler seus valores de elemento.

Há suporte para leitura de locais de memória não assinados.

Confira também

Aplica-se a

ReadIntPtr(IntPtr)

Lê um inteiro do tamanho nativo do processador da memória não gerenciada.

public:
 static IntPtr ReadIntPtr(IntPtr ptr);
[System.Security.SecurityCritical]
public static IntPtr ReadIntPtr(IntPtr ptr);
public static IntPtr ReadIntPtr(IntPtr ptr);
[<System.Security.SecurityCritical>]
static member ReadIntPtr : nativeint -> nativeint
static member ReadIntPtr : nativeint -> nativeint
Public Shared Function ReadIntPtr (ptr As IntPtr) As IntPtr

Parâmetros

ptr
IntPtr

nativeint

O endereço na memória não gerenciada da qual ler.

Retornos

IntPtr

nativeint

O inteiro lido da memória não gerenciada. Um inteiro de 32 bits é retornado em computadores de 32 bits e um inteiro de 64 bits é retornado em computadores de 64 bits.

Atributos

Exceções

ptr não é um formato reconhecido.

-ou-

ptr é null.

-ou-

ptr é inválido.

Exemplos

O exemplo a seguir demonstra como ler e gravar em uma matriz não gerenciada usando os métodos e WriteIntPtr os ReadIntPtr métodos.

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

ReadIntPtr tem um deslocamento implícito de 0. Esse método permite a interação direta com uma matriz de estilo IntPtr 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 ler seus valores de elemento.

Há suporte para leitura de locais de memória não assinados.

Confira também

Aplica-se a