Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Marshal.StructureToPtr<T>(T, IntPtr, Boolean)

.NET Framework (current version)
 

Data di pubblicazione: ottobre 2016

[Supportato in .NET Framework 4.5.1 e versioni successive]

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

Spazio dei nomi:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

[SecurityCriticalAttribute]
public static void StructureToPtr<T>(
	T structure,
	IntPtr ptr,
	bool fDeleteOld
)

Parametri

structure
Type: 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
Type: System.IntPtr

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

fDeleteOld
Type: System.Boolean

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

Parametri tipo

T

Tipo dell'oggetto gestito.

Exception Condition
ArgumentException

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

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

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

Se si utilizza ilStructureToPtr<T>(T, IntPtr, Boolean) metodo per copiare un'istanza diversa per il blocco di memoria in un secondo momento, specificare true per fDeleteOld per rimuovere un riferimento conteggi per i tipi di riferimento nell'istanza precedente. In caso contrario, i tipi di riferimenti gestiti e non gestite copie in modo efficace vengono persa.

Il modello generale per l'utilizzo diStructureToPtr<T>(T, IntPtr, Boolean) è il seguente:

  1. La prima chiamata alStructureToPtr<T> dopo che è stato allocato un blocco di memoria, fDeleteOld deve essere false, poiché non sono alcun contenuto per cancellare.

    System_CAPS_importantImportante

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

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

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

System_CAPS_noteNota

Per bloccare una struttura esistente anziché copiarlo, utilizzare il System.Runtime.InteropServices.GCHandle tipo per creare un handle bloccato per la struttura. Per informazioni dettagliate su come aggiungere, vedere Copying and Pinning.

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Universal Windows Platform
Disponibile da 8.1
.NET Framework
Disponibile da 4.5.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: