0

私は遊んでいてlibpeas、gobject-introspection の動作に関する問題に遭遇しました。

には(こちらlibpeasを参照)というタイプがあります。PluginLoader

へのポイントであるcreate_extensionを返すと呼ばれるメソッドがあります。このタイプを gobject-introspection に追加し、このメソッドの結果の GIR ファイルを確認すると、次のようにマークされていることがわかります。PeasExtension *GObjectintrospectable="0"

<field name="create_extension" introspectable="0">
<callback name="create_extension" introspectable="0">
  <source-position filename="../libpeas/peas-plugin-loader.h"
                   line="60"/>
  <return-value>
    <type name="Extension" c:type="PeasExtension*"/>
  </return-value>
  <parameters>
    <parameter name="loader" transfer-ownership="none">
      <type name="PluginLoader" c:type="PeasPluginLoader*"/>
    </parameter>
    <parameter name="info" transfer-ownership="none">
      <type name="PluginInfo" c:type="PeasPluginInfo*"/>
    </parameter>
    <parameter name="ext_type" transfer-ownership="none">
      <type name="GType" c:type="GType"/>
    </parameter>
    <parameter name="n_parameters" transfer-ownership="none">
      <type name="guint" c:type="guint"/>
    </parameter>
    <parameter name="parameters" transfer-ownership="none">
      <type name="GObject.Parameter" c:type="GParameter*"/>
    </parameter>
  </parameters>
</callback>
</field>

戻り値を変更しvoid *て再コンパイルすると、introspectable="0"属性が GIR ファイルから削除されます。に変更するとGObject *introspectable="0"属性は引き続き存在します。

GObject のインスタンス (ポインター) を返すと、イントロスペクト不能になるようです。しかし、私はなぜ理解していないのですか?

gobject イントロスペクション ドキュメントを読むと、GObject インスタンスを返すことが有効なユース ケースのように見えます。多分それはそのPluginLoader型が抽象的で、これが仮想メソッドであることと関係がありますか?

メソッドの署名を変更せずに、このオブジェクトを内省可能にするのに役立つ注釈はありますか?

4

1 に答える 1