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

How can I use "out caller-allocates" in 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
)

但是,如果我为此简单地将变量声明为 "caller-allocate"(例如 let length;)或为 length[=26= 实例化一个新的 G_TYPE ] 结果总是:

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

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

it seems the method is improperly annotated. It should be (out caller-allocates) (array length=length).

这是我可以解决的自省错误吗 and/or 提交错误或者我误解了 Javascript 中的 "out caller-allocates" 用法?

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

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

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