次の方法で共有


Marshal.WriteIntPtr メソッド

定義

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

オーバーロード

WriteIntPtr(IntPtr, IntPtr)

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

WriteIntPtr(IntPtr, Int32, IntPtr)

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

WriteIntPtr(Object, Int32, IntPtr)
古い.

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

WriteIntPtr(IntPtr, IntPtr)

ソース:
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 が認識された形式ではありません。

または

ptrnull です。

または

ptr が無効です。

次の例では、 メソッドと WriteIntPtr メソッドを使用してアンマネージド配列の読み取りと書き込みを行う方法をReadIntPtr示します。

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

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

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 または無効なアドレスが生成されます。

次の例では、 メソッドと WriteIntPtr メソッドを使用してアンマネージド配列の読み取りと書き込みを行う方法をReadIntPtr示します。

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

注意事項

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.")]
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.")>]
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) を足すと、null または無効なアドレスが生成されます。

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

注釈

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

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

こちらもご覧ください

適用対象