dbus-glib - passing structs as arguments
Steve Kreyer
steve.kreyer at web.de
Fri Apr 17 16:56:43 PDT 2009
Hi,
to my knowledge structs are represented by the dbus-glib-binding via the
type GValueArray.
Why using dbus_g_proxy_call directly? Theres a little tool which
generates you dbus_g_proxy_call invocations in the right way. It is
called dbus-binding-tool. You feed it with your XML interface
specification and it generates for you easy-to-use wrapper functions
around dbus_g_proxy_call for synchronous and asynchronous method calls.
All you have to do is to allocate the GValueArray and pass it to the
generated function in your application:
GError *error = NULL;
GValueArray *dbus_struct;
GValue dbus_struct_member = {0};
dbus_struct = g_value_array_new(0);
g_value_init (&dbus_struct_member, G_TYPE_STRING);
g_value_set_string (&dbus_struct_member, "value of first member");
g_value_array_append (dbus_struct, &dbus_struct_member);
g_value_set_string (&dbus_struct_member, "value of second member");
g_value_array_append (dbus_struct, &dbus_struct_member);
dbus_binding_tool_generated_method (proxy, dbus_struct, &error);
HTH,
Steve
Stanislav Popov wrote:
> Hi all,
> I read D-Bus Tutorial and many other documents!
>
> I have only one problem.
> I am using dbus-glib and I am trying to invoke a method with parameters.
> I would like to pass structures to dbus_g_proxy_call() function.
> For example I have (ss) type.
>
> I tried |DBUS_TYPE_STRUCT which is mentioned in |D-Bus Tutorial| but it
> seems it is not working with GLIB.
> I got:
> |
>
> 1.
> (process:835): GLib-GObject-WARNING **: gtype.c:3312: type id
> `115' is invalid
> 2.
>
> 3.
> (process:835): GLib-GObject-WARNING **: can't peek value table for
> type `<unknown>' which is not currently referenced
> 4.
> Segmentation fault
>
>
> So I did the following:
>
> #define G_STRUCT_STR_STR (dbus_g_type_get_struct("GValueArray",
> G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID))
>
> GValue *value;
>
> value = g_new0 (GValue, 1);
> g_value_init (value, G_STRUCT_STR_STR);
> g_value_take_boxed (value, dbus_g_type_specialized_construct
> (G_STRUCT_STR_STR));
>
> dbus_g_type_struct_set (value, 0, "192.168.0.1", 1, "1234", G_MAXUINT);
> .....
>
> dbus_g_proxy_call (proxy, "SetInfo", &error, G_STRUCT_STR_STR, value,
> G_TYPE_INVALID, G_TYPE_INVALID))
>
> ------
> but I got Segmentation Fault on dbus_g_proxy_call().
>
> Where am I wrong?
>
> Can you help me, please?
>
> Thanks in advance,
> Stanislav
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
>
>
More information about the dbus
mailing list