Marshal.ReadIntPtr Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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
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
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
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.