2

我正在尝试将我的代码表单迁移glib-dbusgdbus. 在早期的实现中,类结构和实例结构都可以由我定义,并且允许指针作为属性。

struct test {
  GObject parent;
  some_structure *pointer;
};

我的实例结构有指针,我可以轻松管理。

但是在 中gdbus,代码是使用生成的gdbus-codegen- 所有类和实例结构都是根据自省 XML 文件自动生成的。

所以我有2个问题

  1. gdbus使用 Gvariant,它明确提到它不支持指针。有什么解决方法吗?
  2. 我可以将内部成员添加到由创建的实例结构gdbus-codegen吗?

我试图用谷歌搜索这些东西,但由于我对 gobjects 和其他gdbus东西不熟悉,所以我不确定。

4

1 回答 1

1

1)GVariant 用于方法参数,而不是实例/应用程序数据指针(如果我理解正确,这就是您要问的问题)

2) 对于基于 gdbus 的服务器实现,您通常会使用信号处理程序(如 https://developer.gnome.org/gio/2.36/gdbus-codegen.html中所述)

然后,为了提供应用数据,您可以简单地通过 g_signal_connect 用户数据指针传递它。

作为替代方案,可以使用 g_object_set_data 将 app-data 指针附加到您的实例,然后您可以稍后使用 g_object_get_data 检索该指针。

于 2014-01-01T17:08:48.457 回答