1

我正在尝试通过具有此签名的 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)

我只能找到一些类似问题的示例,它们都涉及注释错误:

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

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

4

1 回答 1

2

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

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

let [photoBytes, contentType] = contact.get_photo(service, cancellable);
于 2017-07-21T05:51:26.680 回答