Поделиться через


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 не является распознаваемым форматом.

-или-

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

Комментарии

WriteIntPtr обеспечивает прямое взаимодействие с неуправляемым массивом В стиле IntPtr C, устраняя затраты на копирование всего неуправляемого массива (с помощью 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 или недопустимый адрес.

Примеры

В следующем примере показано, как выполнять чтение и запись в неуправляемый массив с помощью 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 обеспечивает прямое взаимодействие с неуправляемым массивом В стиле IntPtr C, устраняя затраты на копирование всего неуправляемого массива (с помощью 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 или недопустимый адрес.

Параметр ptr является объектом ArrayWithOffset. Этот метод не принимает параметры ArrayWithOffset.

Комментарии

WriteIntPtr обеспечивает прямое взаимодействие с неуправляемым массивом байтов В стиле C, устраняя затраты на копирование всего неуправляемого массива (с помощью Marshal.Copy) в отдельный управляемый массив перед установкой значений его элементов.

Запись в невыровненные участки памяти поддерживается.

См. также раздел

Применяется к