如何使用 C 编程从 dbus 传递/返回结构?

Posted

技术标签:

【中文标题】如何使用 C 编程从 dbus 传递/返回结构?【英文标题】:How to pass/return a structure from dbus using C programming? 【发布时间】:2013-06-13 06:32:12 【问题描述】:

我正在使用 gstreamer-1.0 构建音乐播放器。我正在使用 sqlite3 来存储 mp3 文件的元数据。我想使用 dbus 进行 gstreamer 和数据库之间的通信。这基本上是为了将音乐播放器的 UI 和框架分开隔离。这样做时,我想检索已经存储在数据库中的元数据。我通过一个结构返回它。问题是,如何编写通过函数返回结构的 xml 文件。我的结构和功能如下图。`

struct string_vars
  std::string title;
  std::string album;
  std::string artist;
  std::string genre;
  volatile long int real_time;
  volatile long int current_time;
;

struct string_vars Gstreamer_class::req_meta_data(char *song_path
   
  start_playbin_for_database(song_path);
  return label_data;

我试过这样:-

<method name="req_meta_data">
    <arg type="s" name="song_path" direction="in">      
    <arg type="(issssxx)" name="label_data" direction="out">
</method>

我猜是错的。它给我一个错误:-

无法加载“value-dbus-music.xml”:无法将元素放在这里 make: *** [value-server-stub.h] 错误 1

请帮帮我。

【问题讨论】:

需要更多信息。您正在使用哪些 dbus 库? DBUS,作为一个IPC,让你选择不同的库和语言。 【参考方案1】:

返回 struct string_vars 作为输出参数的签名如下

<method name="req_meta_data">
    <arg type="s" name="song_path" direction="in">      
    <arg type="(ssssxx)" name="label_data" direction="out">
</method>

我删除了额外的 "i"

现在遇到您的问题,看起来您的构建系统已配置为从名为“value-dbus-music.xml”的 dbus 内省文件自动生成服务器端存根。 配置构建系统以查找正确的 XML 文件。

【讨论】:

以上是关于如何使用 C 编程从 dbus 传递/返回结构?的主要内容,如果未能解决你的问题,请参考以下文章

DBUS入门与C编程

DBUS入门与C编程

如何从python将'a sv' dbus签名传递给udisks2.Mount()?

C中的Dbus结构和方法调用

将结构传递给 dbus 方法的工具?

如何将函数作为参数从 C 传递到 C++ 并返回到 C