mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-12-26 14:05:31 +00:00
53 lines
1.1 KiB
C#
53 lines
1.1 KiB
C#
|
// GLibSharp.Marshaller.cs : Marshalling utils
|
||
|
//
|
||
|
// Author: Rachel Hestilow <rachel@nullenvoid.com>
|
||
|
//
|
||
|
// (c) 2002, 2003 Rachel Hestilow
|
||
|
|
||
|
namespace GLibSharp {
|
||
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Marshalling utilities
|
||
|
/// </summary>
|
||
|
///
|
||
|
/// <remarks>
|
||
|
/// Utility class for internal wrapper use
|
||
|
/// </remarks>
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|