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.
I think MS.NET makes no assumptions about the returned string other than
that it is a pointer to a null-terminated array of wchar_t characters.
It simply copies it into a managed string, that is all.
Looks like a reasonable approach to me. Why should it try to free the
unmanaged pointer? The unmanaged Dll likely has its own memory manager.