Thanks Massi & Zoltan. It works after removing the ref. As Zoltan said, by defualt classed are passed as reference to unmanaged code.
-YoGi -----Original Message----- From: Massimiliano Mantione To: Yogendra Thakur Cc: 'mono-devel-list@lists.ximian.com ' Sent: 7/28/05 11:17 AM Subject: Re: [Mono-devel-list] Calling Native C api - Marshalling issue. On Thu, 2005-07-28 at 10:15 -0400, Yogendra Thakur wrote: > I am getting problem while executing the c library function from C#. > //Define equivalent class to MyData structure > [StructLayout(LayoutKind.Sequential)] > public class CSMyData > { either should be a struct, not a class... > //Import the dll and define C function. > [DllImport ("mylibrary.dll", EntryPoint="DoSomeOperation")] > static extern Int32 OperateData( ref CSMyData pData); > //Other way of defining > //static extern Int32 OperateData( [In,Out] CSMyData pData); ...or you should omit the "ref" (or the "[In,Out]"). With these modification it works. The issue is that if CSMyData is a struct, then the "ref" (or the "[In,Out]") is needed to get the address of the struct. But if CSMyData is a class, marshalling converts it correctly. I am no marshalling expert, but I think that if you put the "ref" you pass the address of the object reference :-) Ciao, Massi _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list