Marshal.ReadIntPtr Metodo

Definizione

Legge un valore intero della dimensione nativa del processore dalla memoria non gestita. La lettura da posizioni di memoria non allineate è supportata.

Overload

ReadIntPtr(IntPtr, Int32)

Legge un intero di dimensioni native del processore a un offset specificato dalla memoria non gestita.

ReadIntPtr(Object, Int32)
Obsoleti.

Legge un valore intero della dimensione nativa del processore dalla memoria non gestita.

ReadIntPtr(IntPtr)

Legge un intero di dimensioni native del processore dalla memoria non gestita.

ReadIntPtr(IntPtr, Int32)

Legge un intero di dimensioni native del processore a un offset specificato dalla memoria non gestita.

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

Parametri

ptr
IntPtr

nativeint

Indirizzo di base nella memoria non gestita da cui leggere.

ofs
Int32

Offset di byte supplementare, aggiunto al parametro ptr prima della lettura.

Restituisce

IntPtr

nativeint

Intero letto da memoria non gestita all'offset fornito.

Attributi

Eccezioni

L'indirizzo di base (ptr) più il byte di offset (ofs) produce un indirizzo Null o non valido.

Esempio

Nell'esempio seguente viene illustrato come leggere e scrivere in una matrice non gestita usando i ReadIntPtr metodi 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

Commenti

ReadIntPtr consente l'interazione diretta con una matrice di tipo IntPtr C non gestita, eliminando il costo di copiare un'intera matrice non gestita (usando Marshal.Copy) in una matrice gestita separata prima di leggere i valori degli elementi.

La lettura da posizioni di memoria non allineate è supportata.

Vedi anche

Si applica a

ReadIntPtr(Object, Int32)

Attenzione

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

Legge un valore intero della dimensione nativa del processore dalla memoria non gestita.

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

Parametri

ptr
Object

Indirizzo di base dell'oggetto di origine nella memoria non gestita.

ofs
Int32

Offset di byte supplementare, aggiunto al parametro ptr prima della lettura.

Restituisce

IntPtr

nativeint

Intero letto da memoria non gestita all'offset fornito.

Attributi

Eccezioni

L'indirizzo di base (ptr) più il byte di offset (ofs) produce un indirizzo Null o non valido.

ptr è un oggetto ArrayWithOffset. Questo metodo non accetta parametri ArrayWithOffset.

Commenti

ReadIntPtr consente l'interazione diretta con una matrice di tipo IntPtr C non gestita, eliminando il costo di copiare un'intera matrice non gestita (usando Marshal.Copy) in una matrice gestita separata prima di leggere i valori degli elementi.

La lettura da posizioni di memoria non allineate è supportata.

Vedi anche

Si applica a

ReadIntPtr(IntPtr)

Legge un intero di dimensioni native del processore dalla memoria non gestita.

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

Parametri

ptr
IntPtr

nativeint

Indirizzo nella memoria non gestita da cui leggere.

Restituisce

IntPtr

nativeint

Intero letto da memoria non gestita. In computer a 32 bit viene restituito un intero a 32 bit, mentre in computer a 64 bit viene restituito un intero a 64 bit.

Attributi

Eccezioni

ptr non è un formato riconosciuto.

-oppure-

ptr è null.

-oppure-

ptr non è valido.

Esempio

Nell'esempio seguente viene illustrato come leggere e scrivere in una matrice non gestita usando i ReadIntPtr metodi 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

Commenti

ReadIntPtr ha un offset implicito pari a 0. Questo metodo consente l'interazione diretta con una matrice di tipo IntPtr C non gestita, eliminando i costi di copia di un'intera matrice non gestita (usando Marshal.Copy) in una matrice gestita separata prima di leggere i valori degli elementi.

La lettura da posizioni di memoria non allineate è supportata.

Vedi anche

Si applica a