如何使用 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 传递/返回结构?的主要内容,如果未能解决你的问题,请参考以下文章