在 dbus-glib 服务器中传递数组

Posted

技术标签:

【中文标题】在 dbus-glib 服务器中传递数组【英文标题】:Passing array in dbus-glib server 【发布时间】:2014-10-05 22:35:58 【问题描述】:

我有一些使用 dbus-glib 在 dbus 上编写服务器导出和接口。

我正在尝试编写一个将字节数组作为输入的方法,但我很难确定在我的方法参数中使用什么类型。

例如,如果我有一个在 XML 定义中看起来像这样的方法:

<method name="SetData">
  <arg type="ay" name="data" direction="in" />
</method>

我原以为我需要这样的方法:

gboolean set_data(MyObj *obj, GArray *arr, GError **error);

如果我查看生成的直接调用该方法的编组代码,它会期望这样的函数签名:

  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer     data1,
                                                           gpointer     arg_1,
                                                           gpointer     arg_2,
                                                           gpointer     data2)

data1 和 data2 匹配 *obj 和 **error,因此它们之间的 arg_1 和 arg_2 大概与数组有关。这大概是一个长度和值,但在这种情况下,为什么它们都是指针?或者它是一个 GArray 和一些类型信息之类的?

我知道我可能应该改用 GDBus,但这是我目前所坚持的。

【问题讨论】:

【参考方案1】:

看起来编组代码是一条红鲱鱼,我想多了。

实验表明,简单的 GArray* 是传递数组的预期类型。

【讨论】:

以上是关于在 dbus-glib 服务器中传递数组的主要内容,如果未能解决你的问题,请参考以下文章

linux 进程间通信 dbus-glib实例详解三(下) 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象object) 等 )(附代码)

linux 进程间通信 dbus-glib实例详解四(下) C库 dbus-glib 使用(附代码)

linux 进程间通信 dbus-glib实例详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

无法定位软件包dbus-glib-1

无法定位软件包dbus-glib-1

linux 进程间通信 dbus-glib实例详解二(上) 消息和消息总线(附代码)