[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
|

Cart



