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

How to pass/return a structure from dbus using C programming?

本文关键字:传递 返回 结构 dbus 何使用 编程      更新时间:2023-10-16

我正在使用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- bus-music.xml":无法在这里放置元素make: *** [value-server-stub.h] Error 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文件