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
перед чтением.
Возвращаемое значение
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 обеспечивает прямое взаимодействие с неуправляемым массивом В стиле IntPtr
C, устраняя затраты на копирование всего неуправляемого массива (с помощью 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
перед чтением.
Возвращаемое значение
nativeint
Целое число, считываемое из неуправляемой памяти с указанным смещением.
- Атрибуты
Исключения
Сумма базового адреса (ptr
) и байта смещения (ofs
) дает значение null или недопустимый адрес.
Параметр ptr
является объектом ArrayWithOffset. Этот метод не принимает параметры ArrayWithOffset.
Комментарии
ReadIntPtr обеспечивает прямое взаимодействие с неуправляемым массивом В стиле IntPtr
C, устраняя затраты на копирование всего неуправляемого массива (с помощью 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
Адрес неуправляемой памяти, откуда производится чтение.
Возвращаемое значение
nativeint
Целое число, считанное из неуправляемой памяти. На 32-разрядных компьютерах возвращается 32-битное целое число, а на 64-разрядных компьютерах — 64-битное.
- Атрибуты
Исключения
ptr
не является распознаваемым форматом.
-или-
ptr
имеет значение null
.
-или-
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. Этот метод обеспечивает прямое взаимодействие с неуправляемым массивом В стиле IntPtr
C, устраняя затраты на копирование всего неуправляемого массива (с помощью Marshal.Copy) в отдельный управляемый массив перед чтением значений его элементов.
Чтение из невыровненных участков памяти поддерживается.