2013-03-22 105 views
1

DBUS,在XML文件中如果我給出下面的代碼爲什麼proxyvoid生成一個函數返回類型?DBUS返回值

<method name="getLocalTime"> 
     <arg type="s" name="timeString" direction="out" /> 
     <arg type="s" name="dateString" direction="out" /> 
    </method> 


virtual void getMyTime(std::string& time, std::string& date) = 0; 

回答

1

在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調用,而不是調用方法的結果。