OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help



   Re: [xml-dev] SAX for .NET 1.0 released

[ Lists Home | Date Index | Thread 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?
> > 
>                                  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.



News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS