D-Bus:没有 ObjectManager 的导出对象

Posted

技术标签:

【中文标题】D-Bus:没有 ObjectManager 的导出对象【英文标题】:D-Bus: Export object without ObjectManager 【发布时间】:2012-03-18 20:45:50 【问题描述】:

我想创建一个对象并将其导出到 D-Bus。更确切地说,我正在使用 gdbus 并使用 gdbus-codegen 生成对象的代码。

glib 页面上的示例(动物和猫对象)仅显示了如何使用 objectmanager 导出对象。 D-Bus 规范建议仅在需要管理多个对象时才使用 ObjectManager。因为我只有一个对象,所以我不想使用 ObjectManager 的开销。

在我的应用程序(托管对象)中,我已经:

    打开连接“g_bus_own_name”

    获取总线获取回调:'on_bus_acquired'

我现在应该做什么来创建和导出我的对象? 当我调用 '..._skeleton_new()' 时,我想我正在创建一个新的 'service-side' 对象,这是正确的吗? 'g_dbus_connection_register_object' 是正确的方法吗?如果是的话,有什么好的例子可以传递我必须传递的所有参数吗?

我希望有人可以帮助我:)

最好的问候 让-皮埃尔

【问题讨论】:

我想我找到了我正在寻找的东西。我没见过的功能是'g_dbus_interface_skeleton_export'!现在我又开心了:) 你可以回答你自己的问题,甚至批准它。 【参考方案1】:

我认为现在回复为时已晚,但可能对不想回复的其他人有用 使用GDBusObjectManager

使用..._skeleton_new();创建的接口对象无需注册,使用g_dbus_interface_skeleton_export();导出即可

我和你有同样的要求,对注册与否感到困惑。

最后用一些代码分析发现g_dbus_interface_skeleton_export() 在内部注册接口对象。

谢谢 阿鲁恩

【讨论】:

我对你的回答有点困惑,所以向其他人澄清一下。使用..._skeleton_new(); 创建您的对象,然后通过g_dbus_interface_skeleton_export() 导出它

以上是关于D-Bus:没有 ObjectManager 的导出对象的主要内容,如果未能解决你的问题,请参考以下文章

FOSUserBundle 上的错误,传递的参数必须是 ObjectManager 的实例

Symfony2 中 ObjectManager 和 EntityManager 的区别?

RESTKit:重用 objectManager 来制作后续的 POST

如何在没有控制台的 Windows 上运行 D-Bus?

Git + libsecret 抛出“没有 X11 $DISPLAY 无法自动启动 D-Bus”

D-bus 需要 UI 还是也可以在命令行工具中使用?