2010-08-19 20 views
4

我一直在玩GLib的D-Bus綁定,試圖獲得某些東西(任何東西)的工作,但成效非常有限。我一直試圖讓Ross Burton's example code編譯和運行,但不斷遇到新的和令人興奮的困難。D-Bus GLib綁定 - 無法從地面獲取代碼

你能幫忙調試這段代碼嗎?或者說失敗了,請指點一下D-Bus GLib代碼的一些例子,它可以工作嗎?

由於羅斯的代碼外的日期,我已經取代了線

dbus_g_object_class_install_info (G_OBJECT_CLASS (echo_class), &dbus_glib_echo_object_info); 

dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info); 

按他的那篇文章的意見,但沒有其他的變化比其他更新包含目錄以匹配我盒子上的設置。

當運行服務器可執行文件,不過,我得到以下錯誤:

** (process:11747): CRITICAL **: dbus_g_object_type_install_info: assertion `G_TYPE_IS_CLASSED (object_type) || G_TYPE_IS_INTERFACE (object_type)' failed 

此時的堆棧跟蹤,根據廣發行,是

#0 0x0000003b5f40b440 in dbus_g_object_type_install_info() from /usr/lib64/libdbus-glib-1.so.2 
#1 0x0000003b5722909c in g_type_class_ref() from /lib64/libgobject-2.0.so.0 
#2 0x0000003b57229798 in g_type_create_instance() from /lib64/libgobject-2.0.so.0 
#3 0x0000000000400f16 in main (argc=<value optimized out>, argv=0x7fff156497d8) at EchoObject.c:111 

我不知道什麼是出錯,或者下一步應該調試什麼。我想獲得一些基本的代碼發送和接收D-Bus方法調用消息,所以我可以看到事情應該如何在我的應用程序中使用。

我使用D-Bus 0.73。

更新:鑑於我缺乏成功,並且缺乏響應,我目前正在考慮放棄D-Bus並尋找其他IPC機制。

更新2:最後,我使用了一個名爲套接字的Unix方法,它正在完成我所需要的280行代碼(加上測試代碼)。

回答

2

dbus-glib很漂亮...很討厭使用,現在基本沒有維護。你可能會更適合使用即將推出的替代品GDBus,它將包含在下一個穩定的GLib版本中。查看文檔的Lowlevel D-Bus supportHighlevel D-Bus support部分以獲取更多詳細信息。

+0

我現在已經推出了一個不同的解決方案,所以我不認爲我會等待GDBus出現。不管怎麼說,還是要謝謝你! – 2010-09-15 11:55:06

3

在下面一行

dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info); 

您需要使用G_OBJECT_CLASS_TYPE()宏代替G_OBJECT_TYPE的()。

這是因爲echo_class是EchoClass的一個實例,它是GObject世界中的「類結構」。 G_OBJECT_TYPE()用於「對象結構」,這將是上述示例中的Echo結構。

我知道這個答案遲到了@me_and,但也許別人會覺得它有用。