<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Hi Simon:<BR>
<BR>&gt; On Tue, 15 Apr 2008 at 12:36:30 +0000, Robert Rawlins wrote:<BR>&gt; &gt; After reading through the tutorial documentation found here http://dbus.freedesktop.org/doc/dbus-tutorial.html it seems that when calling a method which is published as a dbus service that method must _always_ return a value. Is that correct? What if the method which is called doesn't return a value? can I return a VOID value to save upsetting dbus?<BR>&gt; <BR>&gt; D-Bus methods (should) always return a success or failure message. The<BR>&gt; success message may contain 0 or more return values; the failure message<BR>&gt; may contain anything, although traditionally it contains a string.<BR>&gt; So, a "void" D-Bus method would be one where the success message<BR>&gt; contains no return values.<BR>&gt; <BR>&gt; In dbus-glib APIs, you often end up with a gboolean and a GError ** - on<BR>&gt; success, the gboolean is TRUE and the GError is undefined, on failure<BR>&gt; the gboolean is FALSE and the GError contains the error - plus an<BR>&gt; argument for each argument of the method, and a by-reference (pointer)<BR>&gt; argument for each return value of the method.<BR>&gt; <BR>&gt; For instance, in a "synchronous" service implementation, you always return a<BR>&gt; gboolean indicating success or failure. If the method returns something<BR>&gt; (say, a string), you'll get a gchar ** argument as well, into which you<BR>&gt; must place the returned string on success.<BR><BR>
Ok, that makes fair sense, I thought that was the case, I now understand that concept.<BR>
<BR>&gt; To return nothing from an asynchronous service implementation (one with<BR>&gt; the org.freedesktop.DBus.GLib.Async annotation),<BR>&gt; successfully, you'd call dbus_g_method_return (context); where context<BR>&gt; is the DBusGMethodInvocation you were given. To return a string you'd<BR>&gt; call dbus_g_method_return (context, my_string);.<BR><BR>
Perfect, this seems like a simple enough implementation, and I use org.freedesktop.<FONT face="">DBus.GLib.Async</FONT> annotation in my current build so that code should drop into place.<BR>
<BR>&gt; The org.freedesktop.DBus.GLib.Const and<BR>&gt; org.freedesktop.DBus.GLib.ReturnVal annotations change these rules even<BR>&gt; more confusingly. I'd recommend avoiding them.<BR>&gt; <BR>&gt; Hope this helps,<BR>&gt; Simon<BR>
&nbsp;<BR>
I removed my return lines from a method which I no longer wanted to return a value and couldn't figure out why it broke the application but I'm pretty sure that what you've explain here is the reason. I'll try dropping in the dbus_g_method_return (context) snippet into my method a little later and see what effect it has.<BR>
&nbsp;<BR>
Cheers Simon, I'll keep you posted.<BR>
&nbsp;<BR>
Robert<BR><br /><hr />News, Sports, Entertainment and Weather on your mobile.  <a href='http://mobile.uk.msn.com/pc/msn_content.aspx' target='_new'>Text MSN to 63463 Now.</a></body>
</html>