Método Marshal.SizeOf (Object)
Dica
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.
Retorna o tamanho não gerenciado de um objeto em bytes.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (em mscorlib.dll)
Sintaxe
[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
Parâmetros
structure
Type: System.ObjectO objeto cujo tamanho deve ser retornado.
Valor Retornado
Type: System.Int32
O tamanho do objeto especificado em código não gerenciado.
Exceções
Exception | Condition |
---|---|
ArgumentNullException | O parâmetro structure é null. |
Comentários
Esse método aceita uma instância de uma estrutura, o que pode ser um tipo de referência ou um tipo de valor Demarcado. O layout deve ser explícita ou sequencial.
O tamanho retornado é o tamanho do objeto não gerenciado. Os tamanhos gerenciados e não de um objeto podem ser diferente. Para tipos de caractere, o tamanho é afetado pelo CharSet valor aplicado à classe.
Você pode usar o SizeOf método para determinar a quantidade de memória não gerenciada para alocar usando o AllocHGlobal e AllocCoTaskMem métodos.
Exemplos
O exemplo a seguir cria uma estrutura gerenciada, transfere-a memória não gerenciada e, em seguida, transfere-a para memória gerenciada. Este exemplo usa o SizeOf método para determinar a quantidade de memória não gerenciada para alocar.
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
Informações de Versão
Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Confira Também
CharSet
SizeOf Sobrecarga
Classe Marshal
Namespace System.Runtime.InteropServices
Retornar ao início