Marshal.SizeOf-Methode: (Object)
Veröffentlicht: Oktober 2016
Gibt die nicht verwaltete Größe eines Objekts in Bytes zurück.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Syntax
[ComVisibleAttribute(true)]
public static int SizeOf(
object structure
)
public:
[ComVisibleAttribute(true)]
static int SizeOf(
Object^ structure
)
[<ComVisibleAttribute(true)>]
static member SizeOf :
structure:Object -> int
<ComVisibleAttribute(True)>
Public Shared Function SizeOf (
structure As Object
) As Integer
Parameter
structure
Type: System.ObjectDas Objekt, dessen Größe zurückgegeben werden soll.
Rückgabewert
Type: System.Int32
Die Größe des angegebenen Objekts in nicht verwaltetem Code.
Ausnahmen
Exception | Condition |
---|---|
ArgumentNullException | Der structure-Parameter ist null. |
Hinweise
Diese Methode akzeptiert eine Instanz einer Struktur, die ein Referenztyp oder ein geschachtelter Werttyp sein kann. Das Layout muss sequenziell oder explizit sein.
Die zurückgegebene Größe ist die Größe des nicht verwalteten Objekts. Die verwalteten und nicht verwalteten Größe eines Objekts können sich unterscheiden. Bei Zeichentypen wird die Größe von beeinflusst die CharSet Wert, der auf die Klasse angewendet.
Sie können die SizeOf Möglichkeit festzustellen, wie viel Speicher mithilfe der AllocHGlobal und AllocCoTaskMem Methoden.
Beispiele
Im folgenden Beispiel wird eine verwaltete Struktur erstellt, in den nicht verwalteten Speicher übertragen und anschließend zurück in den verwalteten Speicher übertragen. Dieses Beispiel verwendet die SizeOf Möglichkeit festzustellen, wie viel Speicher.
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
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
Versionsinformationen
Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Siehe auch
CharSet
SizeOf Überladen
Marshal-Klasse
System.Runtime.InteropServices-Namespace
Zurück zum Anfang