方法

GioDBusConnectionregister_object

起始版本: 2.26

声明 [源代码]

guint
g_dbus_connection_register_object (
  GDBusConnection* connection,
  const gchar* object_path,
  GDBusInterfaceInfo* interface_info,
  const GDBusInterfaceVTable* vtable,
  gpointer user_data,
  GDestroyNotify user_data_free_func,
  GError** error
)

描述 [源代码]

object_path 注册导出对象的对 D-Bus 接口的回调,该接口在 interface_info 中描述。

vtable(和 user_data_free_func)中的函数的调用将在您调用此方法时所在线程的 [线程默认主上下文][g-main-context-push-thread-default] 中发生。

注意,传递给 vtable 中函数的所有 GVariant 值都将与 interface_info 中给出的签名匹配 - 如果远程调用方传入不正确的值,则向远程调用方返回 org.freedesktop.DBus.Error.InvalidArgs

此外,如果远程调用方尝试调用 interface_info 中未提到的函数或访问属性,则向调用方返回 org.freedesktop.DBus.Error.UnknownMethod resp. org.freedesktop.DBus.Error.InvalidArgs 错误。

如果 vtable 中的 GDBusInterfaceGetPropertyFunc 函数返回错误的 GVariant 类型,则被视为编程错误。

如果在 object_pathinterface_name 上已经注册了现有的回调,则将 error 设置为 G_IO_ERROR_EXISTS

GDBus 自动实现标准的 D-Bus 接口 org.freedesktop.DBus.Properties、org.freedesktop.DBus.Introspectable 和 org.freedesktop.Peer,因此您无需为您导出的对象实现这些接口。您可以自己实现 org.freedesktop.DBus.Properties,例如异步处理属性的获取和设置。

请注意,只要对象导出,interface_info 的引用计数就会加 1(除非是静态分配的,例如引用计数为 -1 时,参见 g_dbus_interface_info_ref())。另外,请注意 vtable 将被复制。

查看此 [服务器][gdbus-server],了解如何使用此方法的示例。

自 2.26 以来可用。

此方法的实现由语言绑定中的 g_dbus_connection_register_object_with_closures() 提供。

参数

object_path

类型: const gchar*

要注册的对象路径。

数据由方法调用者拥有。
值是一个以 NUL 结尾的 UTF-8 字符串。
interface_info

类型: GDBusInterfaceInfo

接口的 introspection 数据。

数据由方法调用者拥有。
vtable

类型: GDBusInterfaceVTable

要调用的 GDBusInterfaceVTableNULL

参数可以是 NULL
数据由方法调用者拥有。
user_data

类型: gpointer

传递给 vtable 中函数的数据。

参数可以是 NULL
数据由方法调用者拥有。
user_data_free_func

类型: GDestroyNotify

当对象路径注销时调用的函数。

error

类型: GError **

用于 recoverable 错误的返回位置。

参数可以是 NULL
如果返回位置不为 NULL,则必须将其初始化为 NULL GError*
如果没有错误,方法将保留初始化的参数为 NULL
发生错误时,参数将设置为新的 GError;调用者将拥有数据,并负责释放它。

返回值

类型: guint

如果设置了 error,则为 0,否则为可用于 g_dbus_connection_unregister_object() 的注册 ID(不再是 0)。