Marshal.StructureToPtr Metodo

Definizione

Overload

Nome Descrizione
StructureToPtr(Object, IntPtr, Boolean)
Obsoleti.

Effettua il marshalling dei dati da un oggetto gestito a un blocco di memoria non gestito.

StructureToPtr<T>(T, IntPtr, Boolean)

Effettua il marshalling dei dati da un oggetto gestito di un tipo specificato a un blocco di memoria non gestito.

StructureToPtr(Object, IntPtr, Boolean)

Origine:
Marshal.CoreCLR.cs
Origine:
Marshal.CoreCLR.cs
Origine:
Marshal.cs
Origine:
Marshal.cs
Origine:
Marshal.CoreCLR.cs

Attenzione

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

Effettua il marshalling dei dati da un oggetto gestito a un blocco di memoria non gestito.

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)

Parametri

structure
Object

Oggetto gestito che contiene i dati di cui effettuare il marshalling. Questo oggetto deve essere una struttura o un'istanza di una classe formattata.

ptr
IntPtr

nativeint

Puntatore a un blocco di memoria non gestito, che deve essere allocato prima della chiamata a questo metodo.

fDeleteOld
Boolean

true per chiamare il DestroyStructure(IntPtr, Type) metodo sul ptr parametro prima che questo metodo copia i dati. Il blocco deve contenere dati validi. Si noti che il false passaggio quando il blocco di memoria contiene già dati può causare una perdita di memoria.

Attributi

Eccezioni

structure è un tipo di riferimento che non è una classe formattata.

oppure

structure è un'istanza di un tipo generico (solo in .NET Framework 4.5 e versioni precedenti).

Commenti

Se structure è un tipo di valore, può essere boxed o unboxed. Se è sottoposto a boxing, è unboxed prima di copiare.

Una classe formattata è un tipo riferimento il cui layout è specificato dall'attributo StructLayoutAttribute , come LayoutKind.Explicit o LayoutKind.Sequential.

StructureToPtr copia il contenuto di structure nel blocco di memoria preallocato a cui punta il ptr parametro. Se structure contiene tipi di riferimento che eseguono il marshalling ai puntatori di interfaccia COM (interfacce, classi senza layout e System.Object), gli oggetti gestiti vengono mantenuti attivi con i conteggi dei riferimenti. Tutti gli altri tipi di riferimento , ad esempio stringhe e matrici, vengono sottoposto a marshalling per le copie. Per rilasciare questi oggetti gestiti o non gestiti, è necessario chiamare il Marshal.DestroyStructure metodo prima di liberare il blocco di memoria.

Se si usa il StructureToPtr metodo per copiare un'istanza diversa nel blocco di memoria in un secondo momento, specificare true per fDeleteOld rimuovere i conteggi dei riferimenti per i tipi di riferimento nell'istanza precedente. In caso contrario, i tipi di riferimento gestiti e le copie non gestite vengono effettivamente persi.

Il modello complessivo per l'uso StructureToPtr è il seguente:

  1. Nella prima chiamata al StructureToPtr metodo dopo che è stato allocato un blocco di memoria, fDeleteOld deve essere false, perché non sono presenti contenuti da cancellare.

    Importante

    Specificare true per fDeleteOld solo se il blocco contiene dati validi.

  2. Se si copia un'istanza diversa nel blocco di memoria e l'oggetto contiene tipi riferimento, fDeleteOld deve essere true per liberare i tipi riferimento nel contenuto precedente.

  3. Se l'oggetto contiene tipi riferimento, è necessario chiamare il DestroyStructure metodo prima di liberare il blocco di memoria.

Note

Per aggiungere una struttura esistente anziché copiarla, usare il System.Runtime.InteropServices.GCHandle tipo per creare un handle bloccato per la struttura. Per informazioni dettagliate su come aggiungere, vedere Copia e aggiunta.

Vedi anche

Si applica a

StructureToPtr<T>(T, IntPtr, Boolean)

Origine:
Marshal.cs
Origine:
Marshal.cs
Origine:
Marshal.cs
Origine:
Marshal.cs
Origine:
Marshal.cs

Effettua il marshalling dei dati da un oggetto gestito di un tipo specificato a un blocco di memoria non gestito.

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)

Parametri di tipo

T

Tipo dell'oggetto gestito.

Parametri

structure
T

Oggetto gestito che contiene i dati di cui effettuare il marshalling. L'oggetto deve essere una struttura o un'istanza di una classe formattata.

ptr
IntPtr

nativeint

Puntatore a un blocco di memoria non gestito, che deve essere allocato prima della chiamata a questo metodo.

fDeleteOld
Boolean

true per chiamare il DestroyStructure<T>(IntPtr) metodo sul ptr parametro prima che questo metodo copia i dati. Il blocco deve contenere dati validi. Si noti che il false passaggio quando il blocco di memoria contiene già dati può causare una perdita di memoria.

Attributi

Eccezioni

structure è un tipo di riferimento che non è una classe formattata.

Commenti

Una classe formattata è un tipo riferimento il cui layout è specificato dall'attributo StructLayoutAttribute , come LayoutKind.Explicit o LayoutKind.Sequential.

StructureToPtr<T>(T, IntPtr, Boolean) copia il contenuto di structure nel blocco di memoria preallocato a cui punta il ptr parametro. Se structure contiene tipi di riferimento che eseguono il marshalling ai puntatori di interfaccia COM (interfacce, classi senza layout e System.Object), gli oggetti gestiti vengono mantenuti attivi con i conteggi dei riferimenti. Tutti gli altri tipi di riferimento , ad esempio stringhe e matrici, vengono sottoposto a marshalling per le copie. Per rilasciare questi oggetti gestiti o non gestiti, è necessario chiamare il DestroyStructure<T>(IntPtr) metodo prima di liberare il blocco di memoria.

Se si usa il StructureToPtr<T>(T, IntPtr, Boolean) metodo per copiare un'istanza diversa nel blocco di memoria in un secondo momento, specificare true per fDeleteOld rimuovere i conteggi dei riferimenti per i tipi di riferimento nell'istanza precedente. In caso contrario, i tipi di riferimento gestiti e le copie non gestite vengono effettivamente persi.

Il modello complessivo per l'uso StructureToPtr<T>(T, IntPtr, Boolean) è il seguente:

  1. Nella prima chiamata al StructureToPtr metodo dopo che è stato allocato un blocco di memoria, fDeleteOld deve essere false, perché non sono presenti contenuti da cancellare.

    Importante

    Specificare true per fDeleteOld solo se il blocco contiene dati validi.

  2. Se si copia un'istanza diversa nel blocco di memoria e l'oggetto contiene tipi riferimento, fDeleteOld deve essere true per liberare i tipi riferimento nel contenuto precedente.

  3. Se l'oggetto contiene tipi riferimento, è necessario chiamare il DestroyStructure metodo prima di liberare il blocco di memoria.

Note

Per aggiungere una struttura esistente anziché copiarla, usare il System.Runtime.InteropServices.GCHandle tipo per creare un handle bloccato per la struttura. Per informazioni dettagliate su come aggiungere, vedere Copia e aggiunta.

Vedi anche

Si applica a