我在探索爲D 語言(http://d-programming-language.org/)創建Clutter綁定的可能性,並開始使用動態加載libclutter進行一些簡單測試的 。我已經運行 成爲一個可能來自GObject繼承 系統的問題,我很感激得到它的任何幫助。這裏是 概要:使用clutter_stage_get_default返回一個ClutterActor *,其中 我可以使用clutter_actor_ *方法。但是,當我使用clutter_stage_ *或clutter_container_ * 方法時,我總是會收到錯誤或 段錯誤。這裏是我的測試代碼:http://pastebin.com/nVrQ69dUCasting ClutterActor *到ClutterStage *
在上線56 clutter_container_add_actor電話,我得到以下錯誤: (<unknown>:11976): Clutter-CRITICAL **: clutter_container_add_actor: assertion 'CLUTTER_IS_CONTAINER (container)' failed
在示例代碼中,我已經注意到了CLUTTER_STAGE和 CLUTTER_CONTAINER宏鑄造(這顯然是不 ),但據我所知,他們只是執行 一些檢查,然後做了一個普通的C演員。如果這是不正確的,並且一些 Gobject類型的魔法需要在 轉換之前在舞臺指針上完成,請告訴我。綁定和使用 clutter_stage_set_title或clutter_stage_set_color與cast(ClutterStage*)stage
導致 分段錯誤,大概是同樣的問題。
編輯:這是stripped down example沒有外部依賴(如果你不在Linux上,你需要用你的操作系統的等價物替換dl調用)。此代碼失敗段錯誤,它根據GDB和Valgrind的,是在clutter_stage_set_title (in /usr/lib/libclutter-glx-1.0.so.0.600.14)
啊,我沒有意識到我需要在動態綁定時指定C調用約定,儘管回想起來它是有意義的。 – 2011-06-07 16:27:45