Marshal.StructureToPtr Метод

Определение

Перегрузки

Имя Описание
StructureToPtr(Object, IntPtr, Boolean)
Устаревшие..

Маршалирует данные из управляемого объекта в неуправляемый блок памяти.

StructureToPtr<T>(T, IntPtr, Boolean)

Маршалирует данные из управляемого объекта указанного типа в неуправляемый блок памяти.

StructureToPtr(Object, IntPtr, Boolean)

Исходный код:
Marshal.CoreCLR.cs
Исходный код:
Marshal.CoreCLR.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.CoreCLR.cs

Внимание

StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516

Маршалирует данные из управляемого объекта в неуправляемый блок памяти.

public:
 static void StructureToPtr(System::Object ^ structure, IntPtr ptr, bool fDeleteOld);
[System.Obsolete("StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516")]
[System.Security.SecurityCritical]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the object might not be available. Use the StructureToPtr<T> overload instead.")]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Runtime.InteropServices.ComVisible(true)]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(true)]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[<System.Obsolete("StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516")>]
[<System.Security.SecurityCritical>]
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the object might not be available. Use the StructureToPtr<T> overload instead.")>]
static member StructureToPtr : obj * nativeint * bool -> unit
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Security.SecurityCritical>]
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Runtime.InteropServices.ComVisible(true)>]
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(true)>]
static member StructureToPtr : obj * nativeint * bool -> unit
Public Shared Sub StructureToPtr (structure As Object, ptr As IntPtr, fDeleteOld As Boolean)

Параметры

structure
Object

Управляемый объект, содержащий данные для маршалинга. Этот объект должен быть структурой или экземпляром отформатированного класса.

ptr
IntPtr

nativeint

Указатель на неуправляемый блок памяти, который необходимо выделить перед вызовом этого метода.

fDeleteOld
Boolean

true DestroyStructure(IntPtr, Type) вызов метода в параметре ptr перед копированием данных. Блок должен содержать допустимые данные. Обратите внимание, что передача false , когда блок памяти уже содержит данные, может привести к утечке памяти.

Атрибуты

Исключения

structure — это ссылочный тип, который не является форматированным классом.

–или–

structure — это экземпляр универсального типа (только в .NET Framework 4.5 и более ранних версиях).

Комментарии

Если structure это тип значения, его можно откружить или отменить. Если он установлен, перед копированием он распаковается.

Форматированный класс — это ссылочный тип, макет которого указан атрибутом StructLayoutAttribute , как LayoutKind.Explicit или LayoutKind.Sequential.

StructureToPtr копирует содержимое structure в предварительно выделенный блок памяти, на который ptr указывает параметр. Если structure содержит ссылочные типы, которые маршалируют указатели интерфейса COM (интерфейсы, классы без макета и System.Object), управляемые объекты сохраняются в живых со счетчиками ссылок. Все остальные ссылочные типы (например, строки и массивы) маршалируются в копии. Чтобы освободить эти управляемые или неуправляемые объекты, необходимо вызвать Marshal.DestroyStructure метод, прежде чем освободить блок памяти.

Если вы используете StructureToPtr метод для копирования другого экземпляра в блок памяти позже, укажите true , чтобы fDeleteOld удалить счетчики ссылок для ссылочных типов в предыдущем экземпляре. В противном случае управляемые ссылочные типы и неуправляемые копии фактически утечки.

Общий шаблон использования StructureToPtr выглядит следующим образом:

  1. При первом вызове StructureToPtr метода после выделения fDeleteOld блока памяти должно быть falseвызвано отсутствием содержимого.

    Important

    Укажите true только fDeleteOld в том случае, если блок содержит допустимые данные.

  2. При копировании другого экземпляра в блок памяти, а объект содержит ссылочные типы, fDeleteOld необходимо true освободить ссылочные типы в старом содержимом.

  3. Если объект содержит ссылочные типы, перед освобождением блока памяти необходимо вызвать DestroyStructure метод.

Note

Чтобы закрепить существующую структуру вместо копирования, используйте System.Runtime.InteropServices.GCHandle тип для создания закрепленного дескриптора для структуры. Дополнительные сведения о закреплении см. в разделе "Копирование и закрепление".

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

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

StructureToPtr<T>(T, IntPtr, Boolean)

Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs

Маршалирует данные из управляемого объекта указанного типа в неуправляемый блок памяти.

public:
generic <typename T>
 static void StructureToPtr(T structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
public static void StructureToPtr<T>(T structure, IntPtr ptr, bool fDeleteOld);
public static void StructureToPtr<T>(T structure, IntPtr ptr, bool fDeleteOld);
[<System.Security.SecurityCritical>]
static member StructureToPtr : 'T * nativeint * bool -> unit
static member StructureToPtr : 'T * nativeint * bool -> unit
Public Shared Sub StructureToPtr(Of T) (structure As T, ptr As IntPtr, fDeleteOld As Boolean)

Параметры типа

T

Тип управляемого объекта.

Параметры

structure
T

Управляемый объект, содержащий данные для маршалинга. Объект должен быть структурой или экземпляром отформатированного класса.

ptr
IntPtr

nativeint

Указатель на неуправляемый блок памяти, который необходимо выделить перед вызовом этого метода.

fDeleteOld
Boolean

true DestroyStructure<T>(IntPtr) вызов метода в параметре ptr перед копированием данных. Блок должен содержать допустимые данные. Обратите внимание, что передача false , когда блок памяти уже содержит данные, может привести к утечке памяти.

Атрибуты

Исключения

structure — это ссылочный тип, который не является форматированным классом.

Комментарии

Форматированный класс — это ссылочный тип, макет которого указан атрибутом StructLayoutAttribute , как LayoutKind.Explicit или LayoutKind.Sequential.

StructureToPtr<T>(T, IntPtr, Boolean) копирует содержимое structure в предварительно выделенный блок памяти, на который ptr указывает параметр. Если structure содержит ссылочные типы, которые маршалируют указатели интерфейса COM (интерфейсы, классы без макета и System.Object), управляемые объекты сохраняются в живых со счетчиками ссылок. Все остальные ссылочные типы (например, строки и массивы) маршалируются в копии. Чтобы освободить эти управляемые или неуправляемые объекты, необходимо вызвать DestroyStructure<T>(IntPtr) метод, прежде чем освободить блок памяти.

Если вы используете StructureToPtr<T>(T, IntPtr, Boolean) метод для копирования другого экземпляра в блок памяти позже, укажите true , чтобы fDeleteOld удалить счетчики ссылок для ссылочных типов в предыдущем экземпляре. В противном случае управляемые ссылочные типы и неуправляемые копии фактически утечки.

Общий шаблон использования StructureToPtr<T>(T, IntPtr, Boolean) выглядит следующим образом:

  1. При первом вызове StructureToPtr метода после выделения fDeleteOld блока памяти должно быть falseвызвано отсутствием содержимого.

    Important

    Укажите true только fDeleteOld в том случае, если блок содержит допустимые данные.

  2. При копировании другого экземпляра в блок памяти, а объект содержит ссылочные типы, fDeleteOld необходимо true освободить ссылочные типы в старом содержимом.

  3. Если объект содержит ссылочные типы, перед освобождением блока памяти необходимо вызвать DestroyStructure метод.

Note

Чтобы закрепить существующую структуру вместо копирования, используйте System.Runtime.InteropServices.GCHandle тип для создания закрепленного дескриптора для структуры. Дополнительные сведения о закреплении см. в разделе "Копирование и закрепление".

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

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