4

我一直在玩 GLib 的 D-Bus 绑定,试图让某些东西(任何东西)工作,但成功非常有限。我一直在尝试编译和运行Ross Burton 的示例代码,但不断遇到新的令人兴奋的困难。

你能帮忙调试这段代码吗,或者失败了,给我指出一些 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 行代码(加上测试代码)中做的事情。

4

2 回答 2

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 来说太晚了,但也许其他人会觉得它很有用。

于 2012-03-04T21:09:19.260 回答
2

dbus-glib 很漂亮……使用起来很讨厌,而且在这一点上基本上没有维护。您最好使用它即将推出的替代品 GDBus,它将包含在下一个稳定的 GLib 版本中。查看文档的低级 D-Bus 支持高级 D-Bus 支持部分以获取更多详细信息。

于 2010-09-10T16:46:28.317 回答