[Mono-dev] Interop with Native Libraries Question

Mike Edenfield kutulu at kutulu.org
Thu Mar 6 18:23:48 EST 2008


Sebi Onofrei wrote:
> Now, what I tried looks like this:
> *        [DllImport (libraryName, EntryPoint = "method_name", CharSet 
> = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
>         private static unsafe extern integer EXT_method_name(void* 
> handle, out string name, out int length);*
If I remember my interop correctly, you need to tack on a 
[MarshalAs.UnmanagedType(UnmanagedType.LPChar)], or something close to 
that, in front of the string parameter.  CLR strings are quite different 
from old-style null terminated C "strings", and there are many different 
ways the Interop library can interpret string, so you need to tell it.

I think there's also a parameter you can pass into the MarshalAs 
attribute that tells the compiler that the "length" parameter is 
expected to hold the length of the string on the return from the call, 
so it can get the allocation right.

--Mike



More information about the Mono-devel-list mailing list