次の方法で共有


Marshal.ReadIntPtr メソッド

定義

アンマネージ メモリからプロセッサのネイティブ サイズの整数を読み取ります。 アライメントされていないメモリ位置からの読み取りがサポートされています。

オーバーロード

ReadIntPtr(IntPtr, Int32)

アンマネージ メモリから、指定されたオフセットでプロセッサのネイティブ サイズの整数を読み取ります。

ReadIntPtr(Object, Int32)
古い.

アンマネージ メモリからプロセッサのネイティブ サイズの整数を読み取ります。

ReadIntPtr(IntPtr)

アンマネージ メモリからプロセッサのネイティブ サイズの整数を読み取ります。

ReadIntPtr(IntPtr, Int32)

ソース:
Marshal.cs
ソース:
Marshal.cs
ソース:
Marshal.cs

アンマネージ メモリから、指定されたオフセットでプロセッサのネイティブ サイズの整数を読み取ります。

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

パラメーター

ptr
IntPtr

nativeint

読み取り元のアンマネージ メモリ内のベース アドレス。

ofs
Int32

読み取る前に ptr パラメーターに追加されるバイト オフセット。

戻り値

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

注釈

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

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象

ReadIntPtr(Object, Int32)

ソース:
Marshal.cs
ソース:
Marshal.cs
ソース:
Marshal.cs

注意事項

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

アンマネージ メモリからプロセッサのネイティブ サイズの整数を読み取ります。

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

パラメーター

ptr
Object

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

ofs
Int32

読み取る前に ptr パラメーターに追加されるバイト オフセット。

戻り値

IntPtr

nativeint

指定されたオフセットにあるアンマネージ メモリから読み取られた整数。

属性

例外

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

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

注釈

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

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象

ReadIntPtr(IntPtr)

ソース:
Marshal.cs
ソース:
Marshal.cs
ソース:
Marshal.cs

アンマネージ メモリからプロセッサのネイティブ サイズの整数を読み取ります。

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

パラメーター

ptr
IntPtr

nativeint

読み取り元のアンマネージ メモリ内のアドレス。

戻り値

IntPtr

nativeint

アンマネージ メモリから読み取られた整数。 32 ビット コンピューターでは 32 ビット整数が返され、64 ビット コンピューターでは 64 ビット整数が返されます。

属性

例外

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

注釈

ReadIntPtr の暗黙のオフセットは 0 です。 このメソッドを使用すると、アンマネージ C スタイルの IntPtr 配列と直接やり取りできるため、要素の値を読み取る前に(Marshal.Copyを使用して) アンマネージ配列全体を別のマネージド配列にコピーする手間を省きます。

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象