The type of FieldType.Undefined is "FieldType" not "byte".
You should prolly use Enum.GetUnderlyingType(typeof(FieldType)). ^Tum > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:mono-list- > [EMAIL PROTECTED] On Behalf Of Giuseppe Greco > Sent: Wednesday, 13 August 2003 4:00 p.m. > To: Marcus > Cc: [EMAIL PROTECTED] > Subject: Re: [Mono-list] Marshal.SizeOf() vs. sizeof operator > > Marcus, > > here's an example: > > public enum FieldType : byte > { > Undefined = 0, > Int16, > Int32, > Int64 > } > > Then, try something like this: > > using System; > using System.Runtime.InteropServices; > > public class MyClass > { > private FieldType fieldType = FieldType.Undefined; > > public void MyMethod() > { > Console.WriteLine("The size of fieldType is {0}", > Marshal.SizeOf(fieldType.GetType()); > } > } > > The code above executes sucessfully with Mono on Linux, > but it doesn't with .NET on Windwos, where I always get > the following exception: > > Unhandled Exception: System.ArgumentException: > Type FieldType can not be marshaled as an unmanaged > structure; no meaningful size or offset can be computed. > at System.Runtime.InteropServices.Marshal.SizeOf(Type t) > > Rewriting MyMethod like this > > public void MyMethod() > { > Console.WriteLine("The size of fieldType is {0}", > Marshal.SizeOf(Type.GetType("System.Byte")); > } > > it does function also with .NET on Windows... > > OK, my target is Mono on *nix, but I cannot assume that > all the users of our software are running Linux... > > Thanks, > Gius_. > > > >-- Original Message -- > >From: Marcus <[EMAIL PROTECTED]> > >To: "Giuseppe Greco" <[EMAIL PROTECTED]> > >Subject: Re: [Mono-list] Marshal.SizeOf() vs. sizeof operator > >Cc: [EMAIL PROTECTED] > >Date: 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" > >_______________________________________________ > >Mono-list maillist - [EMAIL PROTECTED] > >http://lists.ximian.com/mailman/listinfo/mono-list > > _______________________________________________ > Mono-list maillist - [EMAIL PROTECTED] > http://lists.ximian.com/mailman/listinfo/mono-list _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
