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
)

ただし、変数をこれの「caller-allocate」として単純に宣言するか (例: )、長さlet length;の新しい G_TYPE をインスタンス化すると、結果は常に次のようになります。

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

同様の問題の古い例をいくつか見つけることができましたが、それらはすべて注釈エラーを参照しています。

メソッドに不適切な注釈が付けられているようです。(out caller-allocates) (array length=length) である必要があります。

これは、回避策および/またはバグを報告できるイントロスペクションのバグですか、それとも Javascript での「out caller-allocates」の使用法を誤解していますか?

4

1 に答える 1

2

別の関数を使用することで回避できる場合がありますが、この関数にも適切に注釈が付けられていないようです。引数には、戻り値のlength長さとして注釈を付ける必要があります。https://bugzilla.gnome.orgで GDataのバグ レポートを提出してください。

これ機能する方法は、out 引数 (C コードの caller-allocates とマークされているものであっても) が渡されないことです。それはすべてボンネットの下で起こります。また、長さ引数は、参照する配列を設定するために内部的にのみ使用されます。したがって、関数を呼び出す方法は次のようになります。

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