我一直在玩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行代码(加上测试代码)。
答案 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 support和Highlevel D-Bus support部分。