D-Bus GLib绑定 - 无法从地面获取代码
我一直在玩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行代码(加上测试代码)。
dbus-glib很漂亮...很讨厌使用,现在基本没有维护。你可能会更适合使用即将推出的替代品GDBus,它将包含在下一个稳定的GLib版本中。查看文档的Lowlevel D-Bus support和Highlevel D-Bus support部分以获取更多详细信息。
在下面一行
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,但也许别人会觉得它有用。
我现在已经推出了一个不同的解决方案,所以我不认为我会等待GDBus出现。不管怎么说,还是要谢谢你! – 2010-09-15 11:55:06