Marshal.StructureToPtr Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
true
bu 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-
structure
genel 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:
Bir bellek bloğu ayrıldıktan sonra yöntemine StructureToPtr yapılan ilk çağrıda,
fDeleteOld
temizlenecekfalse
içerik olmadığından olması gerekir.Önemli
fDeleteOld
Yalnızca bloğun geçerli veriler içerdiğini belirtintrue
.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ırtrue
.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
true
bu 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:
Bir bellek bloğu ayrıldıktan sonra yöntemine StructureToPtr yapılan ilk çağrıda,
fDeleteOld
temizlenecekfalse
içerik olmadığından olması gerekir.Önemli
fDeleteOld
Yalnızca bloğun geçerli veriler içerdiğini belirtintrue
.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ırtrue
.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.