[Mono-list] Embedded Mono using DllImport(__Internal) and returning string
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.
More information about the Mono-list