Marshal.StructureToPtr Método

Definición

Sobrecargas

Nombre Description
StructureToPtr(Object, IntPtr, Boolean)
Obsoletos.

Serializa los datos de un objeto administrado a un bloque de memoria no administrado.

StructureToPtr<T>(T, IntPtr, Boolean)

Serializa los datos de un objeto administrado de un tipo especificado en un bloque de memoria no administrado.

StructureToPtr(Object, IntPtr, Boolean)

Precaución

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

Serializa los datos de un objeto administrado a un bloque de memoria no administrado.

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);
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.Security.SecurityCritical]
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
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
[<System.Security.SecurityCritical>]
static member StructureToPtr : obj * nativeint * bool -> unit
Public Shared Sub StructureToPtr (structure As Object, ptr As IntPtr, fDeleteOld As Boolean)

Parámetros

structure
Object

Objeto administrado que contiene los datos que se van a serializar. Este objeto debe ser una estructura o una instancia de una clase con formato.

ptr
IntPtr

nativeint

Puntero a un bloque de memoria no administrado, que se debe asignar antes de llamar a este método.

fDeleteOld
Boolean

true para llamar al DestroyStructure(IntPtr, Type) método en el ptr parámetro antes de que este método copie los datos. El bloque debe contener datos válidos. Tenga en cuenta que pasar false cuando el bloque de memoria ya contiene datos puede provocar una pérdida de memoria.

Atributos

Excepciones

structure es un tipo de referencia que no es una clase con formato.

O bien

structure es una instancia de un tipo genérico (solo en .NET Framework 4.5 y versiones anteriores).

Comentarios

Si structure es un tipo de valor, se puede boxing o unboxing. Si está conversión boxing, se desacopla antes de copiarla.

Una clase con formato es un tipo de referencia cuyo diseño especifica el StructLayoutAttribute atributo , como LayoutKind.Explicit o LayoutKind.Sequential.

StructureToPtr copia el contenido de structure en el bloque de memoria asignado previamente al que apunta el ptr parámetro. Si structure contiene tipos de referencia que calculan referencias a punteros de interfaz COM (interfaces, clases sin diseño y System.Object), los objetos administrados se mantienen activos con recuentos de referencias. Todos los demás tipos de referencia (por ejemplo, cadenas y matrices) se serializarán en copias. Para liberar estos objetos administrados o no administrados, debe llamar al Marshal.DestroyStructure método antes de liberar el bloque de memoria.

Si usa el StructureToPtr método para copiar una instancia diferente en el bloque de memoria más adelante, especifique true para fDeleteOld quitar recuentos de referencia para los tipos de referencia de la instancia anterior. De lo contrario, se filtran eficazmente los tipos de referencia administrados y las copias no administradas.

El patrón general para usar StructureToPtr es el siguiente:

  1. En la primera llamada al StructureToPtr método después de asignar un bloque de memoria, debe ser false, fDeleteOld porque no hay contenido que borrar.

    Importante

    Especifique true solo para fDeleteOld si el bloque contiene datos válidos.

  2. Si copia una instancia diferente en el bloque de memoria y el objeto contiene tipos de referencia, fDeleteOld debe ser true para liberar tipos de referencia en el contenido anterior.

  3. Si el objeto contiene tipos de referencia, debe llamar al DestroyStructure método antes de liberar el bloque de memoria.

Note

Para anclar una estructura existente en lugar de copiarla, use el System.Runtime.InteropServices.GCHandle tipo para crear un identificador anclado para la estructura. Para obtener más información sobre cómo anclar, vea Copiar y anclar.

Consulte también

Se aplica a

StructureToPtr<T>(T, IntPtr, Boolean)

Serializa los datos de un objeto administrado de un tipo especificado en un bloque de memoria no administrado.

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)

Parámetros de tipo

T

Tipo del objeto administrado.

Parámetros

structure
T

Objeto administrado que contiene los datos que se van a serializar. El objeto debe ser una estructura o una instancia de una clase con formato.

ptr
IntPtr

nativeint

Puntero a un bloque de memoria no administrado, que se debe asignar antes de llamar a este método.

fDeleteOld
Boolean

true para llamar al DestroyStructure<T>(IntPtr) método en el ptr parámetro antes de que este método copie los datos. El bloque debe contener datos válidos. Tenga en cuenta que pasar false cuando el bloque de memoria ya contiene datos puede provocar una pérdida de memoria.

Atributos

Excepciones

structure es un tipo de referencia que no es una clase con formato.

Comentarios

Una clase con formato es un tipo de referencia cuyo diseño especifica el StructLayoutAttribute atributo , como LayoutKind.Explicit o LayoutKind.Sequential.

StructureToPtr<T>(T, IntPtr, Boolean) copia el contenido de structure en el bloque de memoria asignado previamente al que apunta el ptr parámetro. Si structure contiene tipos de referencia que calculan referencias a punteros de interfaz COM (interfaces, clases sin diseño y System.Object), los objetos administrados se mantienen activos con recuentos de referencias. Todos los demás tipos de referencia (por ejemplo, cadenas y matrices) se serializarán en copias. Para liberar estos objetos administrados o no administrados, debe llamar al DestroyStructure<T>(IntPtr) método antes de liberar el bloque de memoria.

Si usa el StructureToPtr<T>(T, IntPtr, Boolean) método para copiar una instancia diferente en el bloque de memoria más adelante, especifique true para fDeleteOld quitar recuentos de referencia para los tipos de referencia de la instancia anterior. De lo contrario, se filtran eficazmente los tipos de referencia administrados y las copias no administradas.

El patrón general para usar StructureToPtr<T>(T, IntPtr, Boolean) es el siguiente:

  1. En la primera llamada al StructureToPtr método después de asignar un bloque de memoria, debe ser false, fDeleteOld porque no hay contenido que borrar.

    Importante

    Especifique true solo para fDeleteOld si el bloque contiene datos válidos.

  2. Si copia una instancia diferente en el bloque de memoria y el objeto contiene tipos de referencia, fDeleteOld debe ser true para liberar tipos de referencia en el contenido anterior.

  3. Si el objeto contiene tipos de referencia, debe llamar al DestroyStructure método antes de liberar el bloque de memoria.

Note

Para anclar una estructura existente en lugar de copiarla, use el System.Runtime.InteropServices.GCHandle tipo para crear un identificador anclado para la estructura. Para obtener más información sobre cómo anclar, vea Copiar y anclar.

Consulte también

Se aplica a