4

私は GLib の D-Bus バインディングをいじり、何か (何でも) を機能させようとしましたが、成功は非常に限られていました。私は、 Ross Burton のサンプル コードをコンパイルして実行しようとしてきましたが、新しいエキサイティングな問題に直面し続けています。

このコードのデバッグを手伝ってもらえますか、または失敗した場合は、動作する D-Bus GLib コードの例を教えてもらえますか?

ロスのコードは古くなっているので、行を置き換えました

dbus_g_object_class_install_info (G_OBJECT_CLASS (echo_class), &dbus_glib_echo_object_info);

dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info);

その記事に対する彼のコメントによると、私のボックスのセットアップと一致するようにインクルードディレクトリを更新する以外に変更はありません。

ただし、サーバー実行可能ファイルを実行すると、次のエラーが発生します。

** (process:11747): CRITICAL **: dbus_g_object_type_install_info: assertion `G_TYPE_IS_CLASSED (object_type) || G_TYPE_IS_INTERFACE (object_type)' failed

gdb によると、この時点でのスタック トレースは次のとおりです。

#0  0x0000003b5f40b440 in dbus_g_object_type_install_info () from /usr/lib64/libdbus-glib-1.so.2
#1  0x0000003b5722909c in g_type_class_ref () from /lib64/libgobject-2.0.so.0
#2  0x0000003b57229798 in g_type_create_instance () from /lib64/libgobject-2.0.so.0
#3  0x0000000000400f16 in main (argc=<value optimized out>, argv=0x7fff156497d8) at EchoObject.c:111

何が問題なのか、またはデバッグの次のステップがどうあるべきかわかりません。D-Bus メソッド呼び出しメッセージを送受信する基本的なコードを取得したいので、アプリケーションで使用するためにどのように動作するかを確認できます。

D-Bus 0.73 を使用しています。

更新: 私の側での成功の欠如と、ここでの応答の欠如を考えると、現在、D-Bus を放棄し、他の IPC メカニズムを見つけることを検討しています。

更新 2 : 最終的に、Unix の名前付きソケット アプローチを使用しました。これは、合計 280 行のコード (およびテスト コード) で必要なことを正確に実行します。

4

2 に答える 2

3

次の行で

dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info);

G_OBJECT_TYPE() の代わりに G_OBJECT_CLASS_TYPE() マクロを使用する必要があります。

これは、echo_class が GObject の世界の「クラス構造」である EchoClass のインスタンスであるためです。G_OBJECT_TYPE() は「オブジェクト構造」用で、前述の例では Echo 構造になります。

この回答は@me_andにとって遅すぎることはわかっていますが、他の誰かが役に立つと思うかもしれません。

于 2012-03-04T21:09:19.260 に答える
2

dbus-glibはかなり...使用するのが面倒で、この時点では基本的にメンテナンスされていません。次の安定したGLibリリースに含まれる次の代替品であるGDBusを使用する方がおそらく良いでしょう。詳細については、ドキュメントの低レベルD-Busサポートおよび高レベルD-Busサポートのセクションを確認してください。

于 2010-09-10T16:46:28.317 に答える