C 向GDBus注册多个MPRIS播放器

C 向GDBus注册多个MPRIS播放器,c,glib,dbus,gdbus,C,Glib,Dbus,Gdbus,我想向glib注册多个媒体播放器。最小(非)工作示例是。正如我所理解的,我应该用一个名称导出许多对象,这很奇怪 如果在同一进程中有多个媒体播放器,则需要为每个播放器打开一个到会话总线的D总线连接,并在每个连接上公开一个单独的/org/mpris/MediaPlayer2对象。不能在单个D总线连接上的同一路径上公开多个对象 请注意,如果您正在使用获取总线连接,它将返回一个单例会话总线连接,即每次调用它时都返回相同的连接。为了建立到会话总线的多个连接,您需要使用和进行连接,如g\u bus\u ge

我想向glib注册多个媒体播放器。最小(非)工作示例是。正如我所理解的,我应该用一个名称导出许多对象,这很奇怪

如果在同一进程中有多个媒体播放器,则需要为每个播放器打开一个到会话总线的D总线连接,并在每个连接上公开一个单独的
/org/mpris/MediaPlayer2
对象。不能在单个D总线连接上的同一路径上公开多个对象

请注意,如果您正在使用获取总线连接,它将返回一个单例会话总线连接,即每次调用它时都返回相同的连接。为了建立到会话总线的多个连接,您需要使用和进行连接,如
g\u bus\u get\u sync()
文档中所述:

返回的对象是单例对象,即与其他调用方共享 用于
总线类型的
g\u总线get()
g\u总线get\u同步()
。如果 如果需要专用消息总线连接,请使用
g_dbus_address_get_for_bus_sync()
g\u dbus\u连接\u新的\u地址()


谢谢但是文档中说,对于
g\u dbus\u connection\u new\u for\u address\u sync()
,此构造函数只能用于启动客户端连接。正如我所理解的,我需要启动服务器端连接。'Client-side',而不是
dbus守护进程
,在本例中,它是服务器端。您正在创建的是一个服务(一些D-Bus接口以一个众所周知的名称),而不是一个服务器(消息路由总线)。所以
g\u dbus\u connection\u new\u for\u address\u sync()
绝对适合您的用例。