[Mono-list] Embedded Mono using DllImport(__Internal) and returning string

Jonathan Pryor jonpryor at vt.edu
Mon Mar 12 20:39:51 UTC 2012


On Mar 12, 2012, at 3:51 PM, efontana wrote:
> I'm using Embedded Mono and P/Invoke DllImport.   If I have a method which returns a string
...
> The corresponding "C" method should strdup the string right?

Probably not. During string marshaling, the pointer returned from CSharp_Test_ReturnString() will be freed "as if" through System.Runtime.InteropServices.Marshal.FreeCoTaskMem(), which is platform-specific. On Windows, this is CoTaskMemFree(). On non-Windows, this is g_free().

Either way, unless g_free() is aliased as free(3), strdup() will not allocate memory from the appropriate heap.

Consequently, you should explicitly allocate your memory with the correct memory allocator and strcpy() the value.

 - Jon



More information about the Mono-list mailing list