Hi,<br><br>Thanks a lot for your help.<br><br>It was easy, but I am still stuck in an issue. In another function which return and array of struct and one of the struct member is variant. When I call the function from another program. I receive &quot;DBus::Error&quot; , &quot;what(): unknown type&quot;. The interesting part is I did not receive this error if I return only structure not the array of structure, or return the array of structure without variant as members.
<br><br>So something is wrong in combination of array and variant. The function example which gives and error is as:<br><br>std::vector&lt; DBus::Struct&lt;DBus::String, DBus::UInt32,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;DBus::String, DBus::Variant&gt; &gt;
<br>CManager::GetParameters(const DBus::String &amp;pto)<br>{<br>&nbsp; std::cerr &lt;&lt; &quot;Method GetParameters\n&quot;;<br><br>&nbsp; DBus::Struct&lt; DBus::String, DBus::UInt32,<br>&nbsp;&nbsp;&nbsp; DBus::String,DBus::Variant &gt; param;
<br><br>&nbsp; param._1 = &quot;protocol&quot;;<br>&nbsp; param._2 = 1;<br>&nbsp; param._3 = &quot;string&quot;;<br>&nbsp; <br>&nbsp; // Add the variant<br>&nbsp; DBus::MessageIter i = param._4.writer();<br>&nbsp; i &lt;&lt; DBus::String(&quot;None&quot;);
<br><br>&nbsp; std::vector &lt; DBus::Struct&lt; DBus::String, DBus::UInt32,<br>&nbsp;&nbsp;&nbsp; DBus::String,DBus::Variant&gt; &gt; temp;<br>&nbsp; temp.push_back(param);<br><br>&nbsp; return temp;<br>}<br><br>In this function if I removed variant from the structure or remove vector and just keep struct then it works fine, otherwise the remote caller function terminate with &quot;DBus::Error&quot; , &quot;what(): unknown type&quot; error.
<br><br>Could anyone please help me to figure out the problem?<br><br>-Thanks &amp; Regards<br>Naveen<br><br><div><span class="gmail_quote">On 7/9/07, <b class="gmail_sendername">P. Durante</b> &lt;<a href="mailto:shackan@gmail.com">
shackan@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br><br>On 7/8/07, Naveen Verma &lt;<a href="mailto:ernaveenverma@gmail.com">
ernaveenverma@gmail.com</a>&gt; wrote:<br>&gt; Hi,<br>&gt;<br>&gt; I have a function which return a variant. But whenever I am trying to call<br>&gt; the function. I receive an error and program terminates. I am unable to
<br>&gt; understand what is the reason.<br>&gt; May be I am not creating the variant in correct way. Could anyone please<br>&gt; check the code and error below, and give me an idea what is wrong?<br>&gt;<br>&gt;<br>&gt; DBus::Variant&nbsp;&nbsp;Test::getTestValue()
<br>&gt; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::Variant var;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::MessageIter i = var.writer();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageIter j = i.new_variant(&quot;s&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j.append_string(&quot;Test&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.close_container
(j);<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return var;<br>&gt; }<br>&gt;<br>&gt;<br>&gt; And the error message is:<br>&gt;<br>&gt; process 6933: arguments to<br>&gt; dbus_message_iter_open_container() were incorrect,<br>&gt; assertion &quot;(type == DBUS_TYPE_STRUCT &amp;&amp; contained_signature == NULL) ||
<br>&gt; (type == DBUS_TYPE_DICT_ENTRY &amp;&amp; contained_signature == NULL) ||<br>&gt; contained_signature != NULL&quot; failed in file dbus-message.c line 2330.<br>&gt; This is normally a bug in some application using the D-Bus library.
<br>&gt;<br><br>it&#39;s actually simpler than that<br><br>DBus::Variant&nbsp;&nbsp;Test::getTestValue()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::Variant var;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::MessageIter i = var.writer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.append_string(&quot;hello&quot;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return var;<br>}<br><br>or<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::MessageIter i = var.writer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i &lt;&lt; DBus::String(&quot;hello&quot;)<br>or<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBus::MessageIter i = var.writer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i &lt;&lt; std::string(&quot;hello&quot;);
<br><br>of course, if you want to stuff more values into a variant, you&#39;ll use<br>a structure or an array accordingly<br><br>regards,<br>Paolo<br></blockquote></div><br>