私は、D 言語 ( http://d-programming-language.org/ ) の Clutter バインディングを作成する可能性を探っており、libclutter の動的ロードを使用していくつかの簡単なテストを試すことから始めました。GObject 継承システムに由来する可能性のある問題に遭遇しました。解決方法を教えていただければ幸いです。概要は次のとおりです。clutter_stage_get_default を使用すると、clutter_actor_* メソッドで使用できる ClutterActor* が返されます。しかし、clutter_stage_* または clutter_container_* メソッドを使用すると、常にエラーまたは segfault が発生します。ここに私のテストコードがあります: http://pastebin.com/nVrQ69dU
56 行目の clutter_container_add_actor 呼び出しで、次のエラーが発生します。
(<unknown>:11976): Clutter-CRITICAL **: clutter_container_add_actor:
assertion 'CLUTTER_IS_CONTAINER (container)' failed
サンプル コードでは、キャスト用の CLUTTER_STAGE および CLUTTER_CONTAINER マクロに気付きました (これらは明らかに利用できません)。これが正しくなく、キャストする前にステージ ポインターで Gobject タイプのマジックを実行する必要がある場合は、お知らせください。clutter_stage_set_title または clutter_stage_set_color をバインドして使用するとcast(ClutterStage*)stage
、おそらく同じ問題で、セグメンテーション違反が発生しました。
編集:これは、外部依存関係のない簡素化された例です (Linux を使用していない場合は、dl 呼び出しを OS の同等のものに置き換える必要があります)。このコードは、GDB と Valgrind によると、segfault で失敗します。clutter_stage_set_title (in /usr/lib/libclutter-glx-1.0.so.0.600.14)