方法
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
,则必须将其初始化为NULL
GError*
。如果没有错误,方法将保留初始化的参数为 NULL
。发生错误时,参数将设置为新的 GError
;调用者将拥有数据,并负责释放它。