// GLib.Value.cs - GLib Value class implementation // // Author: Mike Kestner // // (c) 2001 Mike Kestner namespace GLib { using System; using System.Runtime.InteropServices; /// /// Value Class /// /// /// /// An arbitrary data type similar to a CORBA Any which is used /// to get and set properties on Objects. /// public class Value { IntPtr _val; // We use g_malloc0 and g_free to put the GValue on the // heap to avoid some marshalling pain. [DllImport("glib-1.3.dll")] static extern IntPtr g_malloc0 (long n_bytes); [DllImport("glib-1.3.dll")] static extern void g_free (IntPtr mem); [DllImport("gobject-1.3.dll")] static extern void g_value_init (IntPtr val, TypeFundamentals type); /// /// Value Constructor /// /// /// /// Constructs a Value from a spectified string. /// [DllImport("gobject-1.3.dll")] static extern void g_value_set_string (IntPtr val, String data); [DllImport("gobject-1.3.dll")] static extern void g_value_set_boolean (IntPtr val, bool data); public Value (bool val) { _val = g_malloc0 (5 * IntPtr.Size); g_value_init (_val, TypeFundamentals.TypeBoolean); g_value_set_boolean (_val, val); } public Value (String str) { _val = g_malloc0 (5 * IntPtr.Size); g_value_init (_val, TypeFundamentals.TypeString); g_value_set_string (_val, str); } /// /// GetString Method /// /// /// /// Extracts a string from a Value. Note, this method /// will produce an exception if the Value does not hold a /// string value. /// [DllImport("gobject-1.3.dll")] static extern String g_value_get_string (IntPtr val); public String GetString () { // FIXME: Insert an appropriate exception here if // _val.type indicates an error. return g_value_get_string (_val); } /// /// RawValue Property /// /// /// /// Read only. Accesses a pointer to the Raw GValue. /// public IntPtr RawValue { get { return _val; } } } }