Marshal.StructureToPtr Methode

Definition

Überlädt

Name Beschreibung
StructureToPtr(Object, IntPtr, Boolean)
Veraltet.

Marshallen von Daten aus einem verwalteten Objekt zu einem nicht verwalteten Speicherblock.

StructureToPtr<T>(T, IntPtr, Boolean)

Marshallen von Daten aus einem verwalteten Objekt eines angegebenen Typs zu einem nicht verwalteten Speicherblock.

StructureToPtr(Object, IntPtr, Boolean)

Quelle:
Marshal.CoreCLR.cs
Quelle:
Marshal.CoreCLR.cs
Quelle:
Marshal.cs
Quelle:
Marshal.cs
Quelle:
Marshal.CoreCLR.cs

Achtung

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

Marshallen von Daten aus einem verwalteten Objekt zu einem nicht verwalteten Speicherblock.

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)

Parameter

structure
Object

Ein verwaltetes Objekt, das die zu marshallden Daten enthält. Dieses Objekt muss eine Struktur oder eine Instanz einer formatierten Klasse sein.

ptr
IntPtr

nativeint

Ein Zeiger auf einen nicht verwalteten Speicherblock, der zugewiesen werden muss, bevor diese Methode aufgerufen wird.

fDeleteOld
Boolean

true um die DestroyStructure(IntPtr, Type) Methode für den ptr Parameter aufzurufen, bevor diese Methode die Daten kopiert. Der Block muss gültige Daten enthalten. Beachten Sie, dass das Übergeben false , wenn der Speicherblock bereits Daten enthält, zu einem Speicherverlust führen kann.

Attribute

Ausnahmen

structure ist ein Verweistyp, der keine formatierte Klasse ist.

-oder-

structure ist eine Instanz eines generischen Typs (nur in den .NET Framework 4.5 und früheren Versionen).

Hinweise

Wenn structure es sich um einen Werttyp handelt, kann er boxed oder unboxed werden. Wenn es eingeschachtelt ist, wird er vor dem Kopieren entboxt.

Eine formatierte Klasse ist ein Verweistyp, dessen Layout durch das StructLayoutAttribute Attribut angegeben wird, entweder LayoutKind.Explicit oder LayoutKind.Sequential.

StructureToPtr kopiert den Inhalt des structure vorab zugewiesenen Speicherblocks, auf den der ptr Parameter verweist. Wenn structure Referenztypen enthalten sind, die auf COM-Schnittstellenzeiger (Schnittstellen, Klassen ohne Layout und System.Object) gemarstet werden, werden die verwalteten Objekte mit Verweisanzahlen lebendig gehalten. Alle anderen Referenztypen (z. B. Zeichenfolgen und Arrays) werden zu Kopien gemarstet. Um diese verwalteten oder nicht verwalteten Objekte freizugeben, müssen Sie die Marshal.DestroyStructure Methode aufrufen, bevor Sie den Speicherblock freigeben.

Wenn Sie die StructureToPtr Methode verwenden, um eine andere Instanz zu einem späteren Zeitpunkt in den Speicherblock zu kopieren, geben Sie true an, dass fDeleteOld Referenzanzahlen für Verweistypen in der vorherigen Instanz entfernt werden sollen. Andernfalls werden die verwalteten Verweistypen und nicht verwalteten Kopien effektiv geleert.

Das allgemeine Muster für die Verwendung StructureToPtr lautet wie folgt:

  1. Beim ersten Aufruf der StructureToPtr Methode nach der Zuweisung fDeleteOld eines Speicherblocks muss es sich um falseeinen zu löschenden Inhalt handelt.

    Important

    Geben Sie true nur an fDeleteOld , wenn der Block gültige Daten enthält.

  2. Wenn Sie eine andere Instanz in den Speicherblock kopieren und das Objekt Verweistypen enthält, fDeleteOld muss es sich um kostenlose Verweistypen im alten Inhalt handeln true .

  3. Wenn das Objekt Referenztypen enthält, müssen Sie die DestroyStructure Methode aufrufen, bevor Sie den Speicherblock freigeben.

Note

Um eine vorhandene Struktur anzuheften, anstatt sie zu kopieren, verwenden Sie den System.Runtime.InteropServices.GCHandle Typ, um einen angehefteten Handle für die Struktur zu erstellen. Ausführliche Informationen zum Anheften finden Sie unter Kopieren und Anheften.

Weitere Informationen

Gilt für:

StructureToPtr<T>(T, IntPtr, Boolean)

Quelle:
Marshal.cs
Quelle:
Marshal.cs
Quelle:
Marshal.cs
Quelle:
Marshal.cs
Quelle:
Marshal.cs

Marshallen von Daten aus einem verwalteten Objekt eines angegebenen Typs zu einem nicht verwalteten Speicherblock.

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)

Typparameter

T

Der Typ des verwalteten Objekts.

Parameter

structure
T

Ein verwaltetes Objekt, das die zu marshallden Daten enthält. Das Objekt muss eine Struktur oder eine Instanz einer formatierten Klasse sein.

ptr
IntPtr

nativeint

Ein Zeiger auf einen nicht verwalteten Speicherblock, der zugewiesen werden muss, bevor diese Methode aufgerufen wird.

fDeleteOld
Boolean

true um die DestroyStructure<T>(IntPtr) Methode für den ptr Parameter aufzurufen, bevor diese Methode die Daten kopiert. Der Block muss gültige Daten enthalten. Beachten Sie, dass das Übergeben false , wenn der Speicherblock bereits Daten enthält, zu einem Speicherverlust führen kann.

Attribute

Ausnahmen

structure ist ein Verweistyp, der keine formatierte Klasse ist.

Hinweise

Eine formatierte Klasse ist ein Verweistyp, dessen Layout durch das StructLayoutAttribute Attribut angegeben wird, entweder LayoutKind.Explicit oder LayoutKind.Sequential.

StructureToPtr<T>(T, IntPtr, Boolean) kopiert den Inhalt des structure vorab zugewiesenen Speicherblocks, auf den der ptr Parameter verweist. Wenn structure Referenztypen enthalten sind, die auf COM-Schnittstellenzeiger (Schnittstellen, Klassen ohne Layout und System.Object) gemarstet werden, werden die verwalteten Objekte mit Verweisanzahlen lebendig gehalten. Alle anderen Referenztypen (z. B. Zeichenfolgen und Arrays) werden zu Kopien gemarstet. Um diese verwalteten oder nicht verwalteten Objekte freizugeben, müssen Sie die DestroyStructure<T>(IntPtr) Methode aufrufen, bevor Sie den Speicherblock freigeben.

Wenn Sie die StructureToPtr<T>(T, IntPtr, Boolean) Methode verwenden, um eine andere Instanz zu einem späteren Zeitpunkt in den Speicherblock zu kopieren, geben Sie true an, dass fDeleteOld Referenzanzahlen für Verweistypen in der vorherigen Instanz entfernt werden sollen. Andernfalls werden die verwalteten Verweistypen und nicht verwalteten Kopien effektiv geleert.

Das allgemeine Muster für die Verwendung StructureToPtr<T>(T, IntPtr, Boolean) lautet wie folgt:

  1. Beim ersten Aufruf der StructureToPtr Methode nach der Zuweisung fDeleteOld eines Speicherblocks muss es sich um falseeinen zu löschenden Inhalt handelt.

    Important

    Geben Sie true nur an fDeleteOld , wenn der Block gültige Daten enthält.

  2. Wenn Sie eine andere Instanz in den Speicherblock kopieren und das Objekt Verweistypen enthält, fDeleteOld muss es sich um kostenlose Verweistypen im alten Inhalt handeln true .

  3. Wenn das Objekt Referenztypen enthält, müssen Sie die DestroyStructure Methode aufrufen, bevor Sie den Speicherblock freigeben.

Note

Um eine vorhandene Struktur anzuheften, anstatt sie zu kopieren, verwenden Sie den System.Runtime.InteropServices.GCHandle Typ, um einen angehefteten Handle für die Struktur zu erstellen. Ausführliche Informationen zum Anheften finden Sie unter Kopieren und Anheften.

Weitere Informationen

Gilt für: