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