Marshal.WriteIntPtr メソッド

定義

プロセッサのネイティブ サイズの整数値をアンマネージ メモリに書き込みます。 32 ビット整数は 32 ビット システムで書き込まれ、64 ビット整数は 64 ビット システムで書き込まれます。 アラインされていないメモリ位置への書き込みがサポートされています。

オーバーロード

名前 説明
WriteIntPtr(IntPtr, IntPtr)

プロセッサのネイティブ サイズの整数値をアンマネージ メモリに書き込みます。

WriteIntPtr(IntPtr, Int32, IntPtr)

プロセッサのネイティブ サイズの整数値を、指定したオフセットのアンマネージ メモリに書き込みます。

WriteIntPtr(Object, Int32, IntPtr)
古い.

プロセッサのネイティブ サイズの整数値をアンマネージ メモリに書き込みます。

WriteIntPtr(IntPtr, IntPtr)

プロセッサのネイティブ サイズの整数値をアンマネージ メモリに書き込みます。

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 が認識されない形式です。

-または-

ptrnullです。

-または-

ptr が無効です。

次の例では、 ReadIntPtr メソッドと 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)

プロセッサのネイティブ サイズの整数値を、指定したオフセットのアンマネージ メモリに書き込みます。

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) は、null または無効なアドレスを生成します。

次の例では、 ReadIntPtr メソッドと 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)

注意事項

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);
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.")]
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
static member WriteIntPtr : obj * int * nativeint -> unit
[<System.Security.SecurityCritical>]
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
Public Shared Sub WriteIntPtr (ptr As Object, ofs As Integer, val As IntPtr)

パラメーター

ptr
Object

ターゲット オブジェクトのアンマネージ メモリ内のベース アドレス。

ofs
Int32

追加のバイト オフセット。書き込む前に ptr パラメーターに追加されます。

val
IntPtr

nativeint

書き込む値。

属性

例外

ベース アドレス (ptr) とオフセット バイト (ofs) は、null または無効なアドレスを生成します。

ptrArrayWithOffset オブジェクトです。 このメソッドは、 ArrayWithOffset パラメーターを受け入れません。

注釈

WriteIntPtr を使用すると、アンマネージ C スタイルのバイト配列と直接やり取りできるため、要素値を設定する前に( Marshal.Copyを使用して) アンマネージ配列全体を別のマネージド配列にコピーする手間を省きます。

アラインされていないメモリ位置への書き込みがサポートされています。

こちらもご覧ください

適用対象