How to use variant

P. Durante shackan at gmail.com
Sun Jul 8 16:45:04 PDT 2007


Hi,

On 7/8/07, Naveen Verma <ernaveenverma at gmail.com> wrote:
> Hi,
>
> I have a function which return a variant. But whenever I am trying to call
> the function. I receive an error and program terminates. I am unable to
> understand what is the reason.
> May be I am not creating the variant in correct way. Could anyone please
> check the code and error below, and give me an idea what is wrong?
>
>
> DBus::Variant  Test::getTestValue()
> {
>      DBus::Variant var;
>      DBus::MessageIter i = var.writer();
>      MessageIter j = i.new_variant("s");
>      j.append_string("Test");
>      i.close_container(j);
>
>      return var;
> }
>
>
> And the error message is:
>
> process 6933: arguments to
> dbus_message_iter_open_container() were incorrect,
> assertion "(type == DBUS_TYPE_STRUCT && contained_signature == NULL) ||
> (type == DBUS_TYPE_DICT_ENTRY && contained_signature == NULL) ||
> contained_signature != NULL" failed in file dbus-message.c line 2330.
> This is normally a bug in some application using the D-Bus library.
>

it's actually simpler than that

DBus::Variant  Test::getTestValue()
{
	DBus::Variant var;
	DBus::MessageIter i = var.writer();
	i.append_string("hello");
	return var;
}

or
	DBus::MessageIter i = var.writer();
	i << DBus::String("hello")
or
	DBus::MessageIter i = var.writer();
	i << std::string("hello");

of course, if you want to stuff more values into a variant, you'll use
a structure or an array accordingly

regards,
Paolo


More information about the dbus mailing list