2017-08-16 17 views
0

私はdbusサーバーを実装しています。簡単にするために、gdbus-codegenを使用することにしました。gdbus-codegenで生成される型の使い方は?

This hello world exampleおよびit's repositoryは、ヘッダーとソースファイルを生成します。そして、それは機能に信号を接続するには、この操作を行います。

g_signal_connect (interface, 
        "handle-hello-world", 
        G_CALLBACK (on_handle_hello_world), NULL); 

私の質問は次のとおりです。

  • どの機能GType min_min_bus_gdbus_get_type (void)が行うことになっていますか?宣言されていますが、生成されたファイルでは定義されていません。
  • シグナルをコールバック関数に接続する代わりに(前述のように)、私は何とか生成されたヘッダで宣言されたstruct MinMinBusGDBUSIfaceを使用できますか?それらを使用する方法。

私はネット上で見つかった例は、これら二つのものを持っている(*_get_type (void)関数宣言、およびstruct *Ifaceは、生成されたヘッダで宣言された?

+0

はい、CはC++とは異なる言語です。 C *や* C++で答えが欲しいですか? – Toby

+0

@Toby私はそれらが異なっていることは分かっていますが、答えはCとC++の両方で同じでなければなりません。 –

答えて

0

例で遊んでた後、 、最終的に私は答えを考え出した、とどのようにインターフェース構造へのアクセスを得るためには、それを設定するために、どのように。これはどこにもありません発見され、どこにも記載されていません。


後部ファンクションGType min_min_bus_gdbus_get_type (void)は、生成されたソースファイルを調べると、巨大なマクロガーベルで定義されているかもしれませんが、その機能と使用方法はわかりません。


(再生成ヘッダで)MIN_MIN_BUS_GDBUS_GET_IFACEマクロを使用することによってstruct MinMinBusGDBUSIfaceにアクセスする方法があります。

例では、この行を関数コールバックを設定するには:

g_signal_connect (interface, 
        "handle-hello-world", 
        G_CALLBACK (on_handle_hello_world), NULL); 

を置き換えることができる。

MinMinBusGDBUSIface* iface = MIN_MIN_BUS_GDBUS_GET_IFACE(interface); 
iface->handle_hello_world = &on_handle_hello_world; 

とコールバック関数と同じ署名を有するように改変されなければなりませんコールバック:

static gboolean 
on_handle_hello_world (MinMinBusGDBUS *interface, 
         GDBusMethodInvocation *invocation, 
         const gchar *greeting) 
+0

"これはどこにも見つからず、どこにも書かれていません"と書かれています:GObjectマニュアル。これは標準的なGObject型定義であり、 'gdbus-codegen'を使用している場合は、GObjectの使い方を読んでいることを前提としています。マニュアルは次のとおりです。https://developer.gnome.org/gobject/stable/index.html –

+0

@PhilipWithnallありがとうございます。これを示す一例もありません。すべてが "g_signal_connect" –

関連する問題