Marshal.StructureToPtr Yöntem

Tanım

Aşırı Yüklemeler

StructureToPtr(Object, IntPtr, Boolean)
Geçersiz.

Yönetilen bir nesneden yönetilmeyen bir bellek bloğuna verileri sıralar.

StructureToPtr<T>(T, IntPtr, Boolean)

Belirtilen türde bir yönetilen nesneden yönetilmeyen bir bellek bloğuna verileri sıralar.

StructureToPtr(Object, IntPtr, Boolean)

Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.CoreCLR.cs

Dikkat

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

Yönetilen bir nesneden yönetilmeyen bir bellek bloğuna verileri sıralar.

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.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
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)

Parametreler

structure
Object

Sıralanacak verileri tutan yönetilen nesne. Bu nesne, biçimlendirilmiş bir sınıfın yapısı veya örneği olmalıdır.

ptr
IntPtr

nativeint

Bu yöntem çağrılmadan önce ayrılması gereken yönetilmeyen bir bellek bloğunun işaretçisi.

fDeleteOld
Boolean

truebu yöntem verileri kopyalamadan önce parametresinde ptr yöntemini çağırmak DestroyStructure(IntPtr, Type) için. Blok geçerli veriler içermelidir. Bellek bloğu zaten veri içerdiğinde geçişin false bellek sızıntısına yol açabileceğini unutmayın.

Öznitelikler

Özel durumlar

structure biçimlendirilmiş bir sınıf olmayan bir başvuru türüdür.

-veya-

structuregenel bir türün örneğidir (yalnızca .NET Framework 4.5 ve önceki sürümlerde).

Örnekler

Aşağıdaki örnek yönetilen bir yapı oluşturur, yöntemini kullanarak StructureToPtr bunu yönetilmeyen belleğe aktarır ve ardından yöntemini kullanarak PtrToStructure yönetilen belleğe geri aktarır.

using System;
using System.Runtime.InteropServices;

public struct Point
{
    public int x;
    public int y;
}

class Example
{

    static void Main()
    {

        // Create a point struct.
        Point p;
        p.x = 1;
        p.y = 1;

        Console.WriteLine("The value of first point is " + p.x + " and " + p.y + ".");

        // Initialize unmanged memory to hold the struct.
        IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(p));

        try
        {

            // Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, false);

            // Create another point.
            Point anotherP;

            // Set this Point to the value of the
            // Point in unmanaged memory.
            anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point));

            Console.WriteLine("The value of new point is " + anotherP.x + " and " + anotherP.y + ".");
        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
    }
}
Imports System.Runtime.InteropServices



Public Structure Point
    Public x As Integer
    Public y As Integer
End Structure


Module Example


    Sub Main()

        ' Create a point struct.
        Dim p As Point
        p.x = 1
        p.y = 1

        Console.WriteLine("The value of first point is " + p.x.ToString + " and " + p.y.ToString + ".")

        ' Initialize unmanged memory to hold the struct.
        Dim pnt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(p))

        Try

            ' Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, False)

            ' Create another point.
            Dim anotherP As Point

            ' Set this Point to the value of the 
            ' Point in unmanaged memory. 
            anotherP = CType(Marshal.PtrToStructure(pnt, GetType(Point)), Point)

            Console.WriteLine("The value of new point is " + anotherP.x.ToString + " and " + anotherP.y.ToString + ".")

        Finally
            ' Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt)
        End Try

    End Sub
End Module

Açıklamalar

Bir değer türüyse structure kutulanabilir veya kutusu kaldırılabilir. Kutulanmışsa, kopyalamadan önce kutulanmamıştır.

Biçimlendirilmiş sınıf, düzeni özniteliği tarafından StructLayoutAttribute veya LayoutKind.Sequentialolarak LayoutKind.Explicit belirtilen bir başvuru türüdür.

StructureToPtr , içeriğini structure parametresinin işaret eden önceden ayrılmış bellek bloğuna ptr kopyalar. structure COM arabirim işaretçilerine (arabirimler, düzensiz sınıflar ve System.Object) göre sıralayan başvuru türleri içeriyorsa, yönetilen nesneler başvuru sayılarıyla canlı tutulur. Diğer tüm başvuru türleri (örneğin, dizeler ve diziler) kopya olarak sıralanır. Bu yönetilen veya yönetilmeyen nesneleri serbest bırakmak için bellek bloğunu Marshal.DestroyStructure boşaltmadan önce yöntemini çağırmanız gerekir.

Daha sonra bellek bloğuna farklı bir örneği kopyalamak için yöntemini kullanırsanızStructureToPtr, önceki örnekteki başvuru türlerinin başvuru sayılarını kaldırmak için öğesini belirtintrue.fDeleteOld Aksi takdirde, yönetilen başvuru türleri ve yönetilmeyen kopyalar etkili bir şekilde sızdırılır.

Kullanımın StructureToPtr genel deseni aşağıdaki gibidir:

  1. Bir bellek bloğu ayrıldıktan sonra yöntemine StructureToPtr yapılan ilk çağrıda, fDeleteOld temizlenecek falseiçerik olmadığından olması gerekir.

    Önemli

    fDeleteOld Yalnızca bloğun geçerli veriler içerdiğini belirtintrue.

  2. Bellek bloğuna farklı bir örnek kopyalarsanız ve nesne başvuru türleri içeriyorsa, fDeleteOld eski içeriklerde serbest başvuru türleri olmalıdır true .

  3. Nesne başvuru türleri içeriyorsa, bellek bloğunu DestroyStructure boşaltmadan önce yöntemini çağırmanız gerekir.

Not

Var olan bir yapıyı kopyalamak yerine sabitlemek için türünü kullanarak System.Runtime.InteropServices.GCHandle yapı için sabitlenmiş bir tanıtıcı oluşturun. Sabitleme hakkında ayrıntılı bilgi için bkz. Kopyalama ve Sabitleme.

Ayrıca bkz.

Şunlara uygulanır

StructureToPtr<T>(T, IntPtr, Boolean)

Kaynak:
Marshal.cs
Kaynak:
Marshal.cs
Kaynak:
Marshal.cs

Belirtilen türde bir yönetilen nesneden yönetilmeyen bir bellek bloğuna verileri sıralar.

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ür Parametreleri

T

Yönetilen nesnenin türü.

Parametreler

structure
T

Sıralanacak verileri tutan yönetilen nesne. Nesne, biçimlendirilmiş bir sınıfın yapısı veya örneği olmalıdır.

ptr
IntPtr

nativeint

Bu yöntem çağrılmadan önce ayrılması gereken yönetilmeyen bir bellek bloğunun işaretçisi.

fDeleteOld
Boolean

truebu yöntem verileri kopyalamadan önce parametresinde ptr yöntemini çağırmak DestroyStructure<T>(IntPtr) için. Blok geçerli veriler içermelidir. Bellek bloğu zaten veri içerdiğinde geçişin false bellek sızıntısına yol açabileceğini unutmayın.

Öznitelikler

Özel durumlar

structure biçimlendirilmiş bir sınıf olmayan bir başvuru türüdür.

Açıklamalar

Biçimlendirilmiş sınıf, düzeni özniteliği tarafından StructLayoutAttribute veya LayoutKind.Sequentialolarak LayoutKind.Explicit belirtilen bir başvuru türüdür.

StructureToPtr<T>(T, IntPtr, Boolean) , içeriğini structure parametresinin işaret eden önceden ayrılmış bellek bloğuna ptr kopyalar. structure COM arabirim işaretçilerine (arabirimler, düzensiz sınıflar ve System.Object) göre sıralayan başvuru türleri içeriyorsa, yönetilen nesneler başvuru sayılarıyla canlı tutulur. Diğer tüm başvuru türleri (örneğin, dizeler ve diziler) kopya olarak sıralanır. Bu yönetilen veya yönetilmeyen nesneleri serbest bırakmak için bellek bloğunu DestroyStructure<T>(IntPtr) boşaltmadan önce yöntemini çağırmanız gerekir.

Daha sonra bellek bloğuna farklı bir örneği kopyalamak için yöntemini kullanırsanızStructureToPtr<T>(T, IntPtr, Boolean), önceki örnekteki başvuru türlerinin başvuru sayılarını kaldırmak için öğesini belirtintrue.fDeleteOld Aksi takdirde, yönetilen başvuru türleri ve yönetilmeyen kopyalar etkili bir şekilde sızdırılır.

Kullanımın StructureToPtr<T>(T, IntPtr, Boolean) genel deseni aşağıdaki gibidir:

  1. Bir bellek bloğu ayrıldıktan sonra yöntemine StructureToPtr yapılan ilk çağrıda, fDeleteOld temizlenecek falseiçerik olmadığından olması gerekir.

    Önemli

    fDeleteOld Yalnızca bloğun geçerli veriler içerdiğini belirtintrue.

  2. Bellek bloğuna farklı bir örnek kopyalarsanız ve nesne başvuru türleri içeriyorsa, fDeleteOld eski içeriklerde serbest başvuru türleri olmalıdır true .

  3. Nesne başvuru türleri içeriyorsa, bellek bloğunu DestroyStructure boşaltmadan önce yöntemini çağırmanız gerekir.

Not

Var olan bir yapıyı kopyalamak yerine sabitlemek için türünü kullanarak System.Runtime.InteropServices.GCHandle yapı için sabitlenmiş bir tanıtıcı oluşturun. Sabitleme hakkında ayrıntılı bilgi için bkz. Kopyalama ve Sabitleme.

Ayrıca bkz.

Şunlara uygulanır