語言

Marshal.WriteIntPtr 方法

定義

將處理器原生大小的整數值寫入未管理記憶體。 32位元整數寫入32位元系統,64位元整數則寫入64位元系統。 支援寫入未對齊的記憶體位置。

多載

名稱 Description
WriteIntPtr(IntPtr, IntPtr)

將處理器原生大小的整數值寫入未管理記憶體。

WriteIntPtr(IntPtr, Int32, IntPtr)

在指定的偏移量處,將處理器原生大小的整數值寫入未管理記憶體。

WriteIntPtr(Object, Int32, IntPtr)
已淘汰.

將處理器原生大小的整數值寫入未管理記憶體。

WriteIntPtr(IntPtr, IntPtr)

來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs

將處理器原生大小的整數值寫入未管理記憶體。

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)

參數

ptr
IntPtr

nativeint

寫入的非管理記憶體位址。

val
IntPtr

nativeint

要寫入的值。

屬性

例外狀況

ptr 並非被認可的格式。

-或-

ptr 是 null。

-或-

ptr 無效。

範例

以下範例示範如何利用 ReadIntPtr and 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

備註

WriteIntPtr 它能直接與非管理型 C IntPtr 型陣列互動,省去在設定元素值前先複製整個非管理陣列 Marshal.Copy到獨立管理陣列的成本。

支援寫入未對齊的記憶體位置。

另請參閱

適用於

WriteIntPtr(IntPtr, Int32, IntPtr)

來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs

在指定的偏移量處,將處理器原生大小的整數值寫入未管理記憶體。

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)

參數

ptr
IntPtr

nativeint

寫入的非管理記憶體中的基底位址。

ofs
Int32

一個額外的位元組偏移量,會在寫入參數前加入 ptr 。

val
IntPtr

nativeint

要寫入的值。

屬性

例外狀況

基底位址(ptr)加上偏移位元組(ofs)會產生空位址或無效位址。

範例

以下範例示範如何利用 ReadIntPtr and 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

備註

此方法在32位元系統上寫入32位元整數,在64位元系統上寫入64位元整數。

WriteIntPtr 它能直接與非管理型 C IntPtr 型陣列互動,省去在設定元素值前先複製整個非管理陣列 Marshal.Copy到獨立管理陣列的成本。

支援寫入未對齊的記憶體位置。

另請參閱

適用於

WriteIntPtr(Object, Int32, IntPtr)

來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs
來源:
Marshal.cs

警告

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

將處理器原生大小的整數值寫入未管理記憶體。

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)

參數

ptr
Object

目標物件在未管理記憶體中的基底位址。

ofs
Int32

一個額外的位元組偏移量,會在寫入參數前加入 ptr 。

val
IntPtr

nativeint

要寫入的值。

屬性

例外狀況

基底位址(ptr)加上偏移位元組(ofs)會產生空位址或無效位址。

ptr 是一個 ArrayWithOffset 物件。 此方法不接受 ArrayWithOffset 參數。

備註

WriteIntPtr 它能直接與非管理的 C 風格位元組陣列互動,省去在設定元素值前先複製整個非管理陣列(使用 Marshal.Copy)到另一個管理陣列的成本。

支援寫入未對齊的記憶體位置。

另請參閱

適用於