[Mono-list] Marshal.SizeOf() vs. sizeof operator
Marcus
mathpup@mylinuxisp.com
Tue, 12 Aug 2003 16:34:38 -0500
The sizeof operator can only be applied to valuetypes (e.g. char, int, struct)
and not to reference types (classes). The sizeof operator is only available
in unsafe code.
Marshal.SizeOf() can be applied to an instance or a Type, and it returns the
unmanaged size of the object. Unlike the sizeof operator, Marshal.SizeOf() is
not restricted to valuetypes.
I don't quite understand what you were saying about char types. Can you
provide an example?
As for custom classes, I suspect that you need to use the StructLayout
attribute, such as [StructLayout(LayoutKind.Sequential)] or using
explicit layout. The error on Rotor is System.ArgumentException: Type Class
can not be marshaled as an unmanaged structure; no meaningful size or offset
can be computed.
On Tuesday 12 August 2003 7:29 am, Giuseppe Greco wrote:
> Marshal.SizeOf() and the sizeof() operator
> return the same result, so what's the real
> difference between them?
>
> Until now, I've used Marshal.SizeOf()...
> and with Mono on Linux it works fine.
>
> This morning I've had the good (or bad) idea
> to test my code on Windows with .NET... and
> the result was
>
> 1. Marshal.SizeOf() is unable to determine the
> type of custom classes
>
> 2. for char types, Marshal.SizeOf() always returns
> "System.byte[]" instead of "System.Char"