[Home] [By Thread] [By Date] [Recent Entries]


> > > 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?
> > 
> 
>                                  Hi,
>   
>   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.

Karl

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member