【问题标题】:How can I use "out caller-allocates" in GJS?如何在 GJS 中使用“out caller-allocates”?
【发布时间】:2017-07-21 13:51:26
【问题描述】:

我正在尝试通过具有此签名的 GData.ContactsContact.get_photo() 检索联系人照片:

get_photo(
    GDataContactsContact *self,
    GDataContactsService *service,
    gsize *length,                    (out caller-allocates)
    gchar **content_type,             (out caller-allocates)
    GCancellable *cancellable,
    GError *error
)

但是,如果我只是为此声明一个“调用者分配”变量(例如let length;)或为 length 实例化一个新的 G_TYPE,结果总是:

Gjs-Message: JS ERROR: Unsupported type guint64 for (out caller-allocates)

我只能找到similar problems 的几个示例,它们都涉及注释错误:

该方法的注释似乎不正确。它应该是(out caller-allocates)(数组长度=长度)。

这是一个自省错误,我可以解决和/或提交错误,还是我误解了 Javascript 中的“out caller-allocates”用法?

【问题讨论】:

    标签: glib gdata gjs


    【解决方案1】:

    您可以通过使用另一个函数来解决它,但似乎这个函数也没有正确注释。 length 参数应该被注释为返回值的长度。请在https://bugzilla.gnome.org 提交 GData 的错误报告。

    应该的工作方式是不传入输出参数(即使是标记为 C 代码调用者分配的参数);这一切都发生在幕后。而且,长度参数仅在内部使用,以设置它们引用的数组。所以调用函数的预期方式是:

    let [photoBytes, contentType] = contact.get_photo(service, cancellable);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      相关资源
      最近更新 更多