Marshal.WriteIntPtr Methode

Definitie

Hiermee schrijft u een systeemeigen geheel getalwaarde van de processor naar onbeheerd geheugen. 32-bits gehele getallen worden geschreven op 32-bits systemen en 64-bits gehele getallen worden geschreven op 64-bits systemen. Schrijven naar niet-uitgelijnde geheugenlocaties wordt ondersteund.

Overloads

Name Description
WriteIntPtr(IntPtr, IntPtr)

Hiermee schrijft u een geheel getal in systeemeigen grootte van een processor naar onbeheerd geheugen.

WriteIntPtr(IntPtr, Int32, IntPtr)

Hiermee schrijft u een geheel getal van systeemeigen grootte naar onbeheerd geheugen op een opgegeven offset.

WriteIntPtr(Object, Int32, IntPtr)
Verouderd.

Hiermee schrijft u een systeemeigen geheel getalwaarde van de processor naar onbeheerd geheugen.

WriteIntPtr(IntPtr, IntPtr)

Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs

Hiermee schrijft u een geheel getal in systeemeigen grootte van een processor naar onbeheerd geheugen.

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)

Parameters

ptr
IntPtr

nativeint

Het adres in onbeheerd geheugen waarnaar moet worden geschreven.

val
IntPtr

nativeint

De waarde die moet worden geschreven.

Kenmerken

Uitzonderingen

ptr is geen herkende indeling.

– of –

ptr is null.

– of –

ptr is ongeldig.

Voorbeelden

In het volgende voorbeeld ziet u hoe u met behulp van de ReadIntPtr en WriteIntPtr methoden kunt lezen en schrijven naar een onbeheerde matrix.

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

Opmerkingen

WriteIntPtr maakt directe interactie mogelijk met een niet-beheerde C-stijlmatrix IntPtr , waardoor de kosten van het kopiëren van een hele onbeheerde matrix (met behulp Marshal.Copy) naar een afzonderlijke beheerde matrix worden geëlimineerd voordat de elementwaarden worden ingesteld.

Schrijven naar niet-uitgelijnde geheugenlocaties wordt ondersteund.

Zie ook

Van toepassing op

WriteIntPtr(IntPtr, Int32, IntPtr)

Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs

Hiermee schrijft u een geheel getal van systeemeigen grootte naar onbeheerd geheugen op een opgegeven offset.

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)

Parameters

ptr
IntPtr

nativeint

Het basisadres in niet-beheerd geheugen waarnaar moet worden geschreven.

ofs
Int32

Een extra byte-offset, die wordt toegevoegd aan de ptr parameter voordat u schrijft.

val
IntPtr

nativeint

De waarde die moet worden geschreven.

Kenmerken

Uitzonderingen

Basisadres (ptr) plus offset byte (ofs) produceert een null- of ongeldig adres.

Voorbeelden

In het volgende voorbeeld ziet u hoe u met behulp van de ReadIntPtr en WriteIntPtr methoden kunt lezen en schrijven naar een onbeheerde matrix.

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

Opmerkingen

Deze methode schrijft een 32-bits geheel getal op 32-bits systemen en een 64-bits geheel getal op 64-bits systemen.

WriteIntPtr maakt directe interactie mogelijk met een niet-beheerde C-stijlmatrix IntPtr , waardoor de kosten van het kopiëren van een hele onbeheerde matrix (met behulp Marshal.Copy) naar een afzonderlijke beheerde matrix worden geëlimineerd voordat de elementwaarden worden ingesteld.

Schrijven naar niet-uitgelijnde geheugenlocaties wordt ondersteund.

Zie ook

Van toepassing op

WriteIntPtr(Object, Int32, IntPtr)

Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs
Bron:
Marshal.cs

Let op

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

Hiermee schrijft u een systeemeigen geheel getalwaarde van de processor naar onbeheerd geheugen.

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);
[System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")]
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the object might not be available")]
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);
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.")>]
[<System.Security.SecurityCritical>]
static member WriteIntPtr : obj * int * nativeint -> unit
[<System.Obsolete("WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases.")>]
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the object might not be available")>]
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
static member WriteIntPtr : obj * int * nativeint -> unit
[<System.Security.SecurityCritical>]
static member WriteIntPtr : obj * int * nativeint -> unit
Public Shared Sub WriteIntPtr (ptr As Object, ofs As Integer, val As IntPtr)

Parameters

ptr
Object

Het basisadres in het niet-beheerde geheugen van het doelobject.

ofs
Int32

Een extra byte-offset, die wordt toegevoegd aan de ptr parameter voordat u schrijft.

val
IntPtr

nativeint

De waarde die moet worden geschreven.

Kenmerken

Uitzonderingen

Basisadres (ptr) plus offset byte (ofs) produceert een null- of ongeldig adres.

ptr is een ArrayWithOffset object. Deze methode accepteert ArrayWithOffset geen parameters.

Opmerkingen

WriteIntPtr maakt directe interactie mogelijk met een niet-beheerde bytematrix in C-stijl, waardoor de kosten van het kopiëren van een hele onbeheerde matrix (met behulp) Marshal.Copynaar een afzonderlijke beheerde matrix worden geëlimineerd voordat de elementwaarden worden ingesteld.

Schrijven naar niet-uitgelijnde geheugenlocaties wordt ondersteund.

Zie ook

Van toepassing op