Как я могу использовать "out caller-allocates" в 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)
Я мог найти только несколько старых примеров подобных проблем, которые все относятся к ошибкам аннотации:
кажется, что метод неправильно аннотирован. Должно быть (out caller-allocates) (длина массива = длина).
Является ли это ошибкой самоанализа, которую я могу обойти и / или зарегистрировать ошибку, или я неправильно понимаю использование "out caller-allocates" в Javascript?
1 ответ
Вы можете обойти это, используя другую функцию, но кажется, что эта функция также не аннотирована должным образом. length
Аргумент должен быть аннотирован как длина возвращаемого значения. Пожалуйста, отправьте отчет об ошибке на https://bugzilla.gnome.org/ для GData.
Это должно работать так, что входящие аргументы (даже те, которые помечены как вызывающие абоненты для кода C) не передаются; это все происходит под капотом. И аргументы длины используются только внутри, чтобы установить массив, на который они ссылаются. Таким образом, ожидаемый способ вызова функции:
let [photoBytes, contentType] = contact.get_photo(service, cancellable);