// GLibSharp.Marshaller.cs : Marshalling utils // // Author: Rachel Hestilow // // (c) 2002, 2003 Rachel Hestilow namespace GLibSharp { using System; using System.Runtime.InteropServices; /// /// Marshalling utilities /// /// /// /// Utility class for internal wrapper use /// public class Marshaller { [DllImport("libglib-2.0-0.dll")] static extern void g_free (IntPtr mem); public static string PtrToStringGFree (IntPtr ptr) { string ret = Marshal.PtrToStringAnsi (ptr); g_free (ptr); return ret; } [DllImport("libglib-2.0-0.dll")] static extern void g_strfreev (IntPtr mem); public static string[] PtrToStringGFree (IntPtr[] ptrs) { // The last pointer is a null terminator. string[] ret = new string[ptrs.Length - 1]; for (int i = 0; i < ret.Length; i++) { ret[i] = Marshal.PtrToStringAnsi (ptrs[i]); g_free (ptrs[i]); } return ret; } [DllImport("libglib-2.0-0.dll")] static extern IntPtr g_strdup (string str); public static IntPtr StringToPtrGStrdup (string str) { return g_strdup (str); } } }