我如何使用" out caller-allocation"在GJS?

时间:2017-07-21 00:54:07

标签: glib gdata gjs

我正在尝试通过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;)或实例化长度的新G_TYPE,结果始终为:

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

我只能找到similar problems的几个旧的示例,它们都引用了注释错误:

  

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

这是一个内省错误,我可以解决和/或提交错误,或者我误解了#34;调用者分配"在Javascript中使用?

1 个答案:

答案 0 :(得分:2)

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

应该工作的方式是不传入out参数(即使是那些标记为C代码的caller-allocation的参数);一切都发生在引擎盖下。并且,长度参数仅在内部使用,以便设置它们引用的数组。所以调用函数的预期方法是:

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