ANNOUNCE: D-Bus 0.50 - "You run and you run to catch up with the sun, but � sinking" is released

Colin Walters walters at
Wed Sep 7 09:32:46 PDT 2005

On Wed, 2005-09-07 at 10:45 +0100, Jamie McCracken wrote:

> 1) The Glib bindings currently uses GValue for DBUS_TYPE_VARIANT whilst 
> a better mapping might be GValueArray. The Gvalue mapping can be 
> problematic when the variant holds a struct as there is no way to access 
> individual struct members from a GValue 

I know the docs need to be updated...but:

D-BUS structs map to GValueArray (G_TYPE_VALUE_ARRAY).  To access a
structure contained in a variant, it would look something like this:

GValue myvalue = {0,};
GValueArray *values;
guint i;

dbus_g_proxy_call (myproxy, "GetValue", NULL, G_TYPE_INVALID,
                   G_TYPE_VALUE, &myvalue, G_TYPE_INVALID);
if (G_VALUE_TYPE (&myvalue) != G_TYPE_VALUE_ARRAY) {
  g_warning ("communication error");
values = g_value_get_boxed (&myvalue);
for (i = 0; i < values->n_values; i++) {
  g_print ("type: %s\n", g_type_name (G_VALUE_TYPE (g_value_array_get_nth (values, i)));

> (this is particularily a problem 
> in cases where the struct could contain anything) and also when passing 
> a G_BOXED_TYPE as an input variant parameter (how can the variant derive 
> the correct signature from a Gvalue holding a struct?).

You can't pass G_TYPE_BOXED to the GLib bindings directly; you need to
pass a derived type.

> 2) I need support for DBUS DICTs of signature a{sv} which need to map to 
> a GHashTable containing (string, GValueArray)

The GLib bindings already support a{sv}; there is some example usage in
the test suite.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url :

More information about the dbus mailing list