我正在尝试在 linux 系统上创建点对点 gdbus 通信。我使用 gdbus-codegen 工具生成可用于创建服务器的代码。我的服务器程序使用生成的骨架函数实例化一个对象,并通过 g_dbus_interface_skeleton_export 函数将其导出。以下是服务器接收到新连接时调用的服务器函数的概述:
static gboolean on_new_connection(GDBusServer *server, GDBusConnection *connection, gpointer user_data)
{
GError *error = NULL;
printf("Got a new connection!\n");
my_object = org_some_object_skeleton_new();
g_signal_connect(my_object, "handle-get-magic-number", G_CALLBACK(my_callback_function), NULL);
if(!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(my_object), connection, "/some/path", &error))
return TRUE;
}
编译并启动服务器后,我尝试使用 gdbus 工具联系它:
gdbus call --address=unix:path=/home/my_user_name/MySockets/some_socket --object-path=/some/path --method=org.some.object.get_magic_number
但是,我得到以下响应:
Error connecting: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.DBus” on object at path /org/freedesktop/DBus
这里发生了什么?在创建点对点服务器时实际上是否可以使用生成的骨架函数,还是必须使用 g_dbus_connection_register_object 等较低级别的 API 调用?