[Mono-list] Jon's reply : Parameter passing using PInvoke

Shankari shankari82 at yahoo.com
Wed Oct 19 20:15:32 EDT 2005


here is Jon's answer to my queries. Any more insights
or clarifications are welcome.

>   : I have a structure in my C# code. If
> in my invocation, I pass a reference to this
> structure.  I want to know the size of the struct in
> mono. I guess it pushes the "address" on to the
stack.
> But I want the size of the struct pointed to by the
> address.
> 
> Is there any way to get this.

System.Runtime.InteropServices.Marshal.SizeOf(). :-)

Though there's an important question: is this through
P/Invoke or
through an icall interface?  And is it a C# struct or
a C# class?

For P/Invoke it doesn't matter, but for icalls the
class will have the
standard object header, which is 8 bytes in size IIRC.

> mono_marshal_type_size doesnt seem to be the right
> function..

Why not?

> I dereferenced the pointer at the
emit_native_wrapper
> level  as *(sig->params[i])->data.klass and the
> instance size is shown as 24. where as my structre
is
> just has 4 in values i.e 16.

Either your structure has padding issues, or you're
within an icall
interface passing a reference type, thus you'd have
the object header 
to
contend with.

> If I need to copy this structure by value ...what
size
> should I be using = 16 or instance size of 24??
> If it is 16 : How can we get this in *mono* (not at
> the C# program level).

I lack the knowledge to answer this.

 - Jon



		
__________________________________ 
Yahoo! Music Unlimited 
Access over 1 million songs. Try it free.
http://music.yahoo.com/unlimited/


More information about the Mono-list mailing list