Marshalling of the Structure and array of Structures from QT into GLib API

Bogdan Lotko boguslaw.lotko at chello.at
Mon Nov 28 03:15:13 PST 2011


Hello,

By sending a structure over the D-Bus using QT API as the last step I 
pack my structure s into QVariant and use the QVariant as an argument of 
me method.

QVariant v;

v.setValue( s );

myIf->asyncCall( "myMethod", v );


On GLib API, I receive the QValueArray *

Now I'd like to send QList<s>.

 From the Qt Side the procedure is the same, pack the list into QVariant 
and send.

QVariant v;

QList<s>  l;

v.setValue( l );

myIf->asyncCall( "myMethod", v );


BUT  What I receive on the GLib API is not the GValueArray * but the 
GPtrArray * is it correct?
( the attempt to unpack the GValueArray fails - the n_values is a 
accidental number and the application crashes by 
g_value_array_get_nth(...),
   whereas the unpacking of GPtrArray * seems to work correctly )

It is somehow misleading. I thought, that packing of an item into 
QVariant, will always result in a GValueArray * on GLib API.

Additionally for the method generated from the XML definition

<method name="myMethod">
<arg type="a(myStructureSignature)">
</method>

the compiler accepts both types of argument i.e. GValueArray * but the 
GPtrArray * could somebody explain why?

Thanks,

Bogdan






More information about the dbus mailing list