Lists Home |
Date Index |
> > Also, some methods in Expat.cs, like XMLErrorString, are defined to
> > return a 'string' in
> > managed code, but the unmanaged method returns a pointer to static memory. This
> > will cause problems since the runtime will attempt to free the memory
> > returned by the
> > unmanaged function. The solution is to return 'IntPtr' and explicitly
> > marshal the pointer
> > to a string using the functions in the Marshal class.
> I thought that is taken care of by default marshalling, where
> a copy is made of the string, so the above should not happen.
> Does Mono not have default marshalling?
The default marshalling behavior is to free strings returned by the
unmanaged function after they have been converted to a managed string. The
.NET runtime somehow detects that the returned string points to static data and
does not free it, but the mono runtime does. Thats why this works under MS.NET
but not under mono.