方法
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_path 和 interface_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-
接口的 introspection 数据。
数据由方法调用者拥有。 vtable-
要调用的
GDBusInterfaceVTable或NULL。参数可以是 NULL。数据由方法调用者拥有。 user_data-
类型:
gpointer传递给
vtable中函数的数据。参数可以是 NULL。数据由方法调用者拥有。 user_data_free_func-
类型:
GDestroyNotify当对象路径注销时调用的函数。
error-
类型:
GError **用于 recoverable 错误的返回位置。
参数可以是 NULL。如果返回位置不为 NULL,则必须将其初始化为NULLGError*。如果没有错误,方法将保留初始化的参数为 NULL。发生错误时,参数将设置为新的 GError;调用者将拥有数据,并负责释放它。