D-Bus GLib绑定 - 无法获得代码

时间:2010-08-19 16:30:08

标签: c ipc glib dbus

我一直在玩GLib的D-Bus绑定,试图让某些东西(任何)工作,但成功非常有限。我一直试图让Ross Burton's example code进行编译和运行,但仍然遇到新的令人兴奋的困难。

你可以帮助调试这段代码,或者没有这样做,请指出一些有效的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

根据gdb,此时的堆栈跟踪是

#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 个答案:

答案 0 :(得分: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的答案是迟到的,但也许其他人会发现它很有用。

答案 1 :(得分:2)

dbus-glib非常......使用起来很讨厌,而且在这一点上它基本上没有维护。您可能最好使用即将推出的替代产品GDBus,它将包含在下一个稳定的GLib版本中。有关详细信息,请查看文档的Lowlevel D-Bus supportHighlevel D-Bus support部分。