在DBus中,方法調用的輸出是通過參數列表傳遞的,而不是傳統的C函數返回機制。此外,如果該方法不是異步的,則只允許返回一個真/假布爾結果(這是在傳統的C函數返回樣式中返回的)。在你的反思中,你必須註釋這個方法是異步的,因爲它返回多個字符串值。您的代理方法的調用將指針傳遞給兩個字符串變量得到的結果英寸
如果我使用的dbus - 巧舌如簧的例子...
<method name="getLocalTime">
<arg type="s" name="timeString" direction="out" />
<arg type="s" name="dateString" direction="out" />
<annotate name="org.freedesktop.DBus.GLib.Async" />
</method>
然後我在執行該方法的...
void
dbus_service_get_local_time(
MyGObject* self,
DBusGMethodInvocation* context
)
{
char* timeString;
char* dateString;
// do stuff to create your two strings...
dbus_g_method_return(context, timeString, dateString);
// clean up allocated memory, etc...
}
,並從呼叫者的角度來看,代理方法調用看起來像這樣...
gboolean
dbus_supplicant_get_local_time(
DBusProxy* proxy,
char* OUT_timeString,
char* OUT_dateString,
GError** error
);
請注意,在代理方法中,gboolean結果是是否可以進行D-Bus調用,而不是調用方法的結果。