2011-01-16 5 views
0

ルアビンドに問題があります。私はstd :: mapを定義して、luaで作成されたオブジェクトを割り当てます。私はこのようにLUAのグローバルオブジェクトとしてこのマップを公開:いつ自由に作成されたオブジェクトをルアビンドしますか?

luabind::globals(L)["g_SceneManager2D"] = this; 

その後、このオブジェクトは、多くのオブジェクトが作成され、このマップに挿入され、LUA、に関数に使用されています。この問題はlua関数が終了し、luabindが自動的にマップのすべての内容が失われるため、コントロールをC++側のプログラムに戻すときに発生します。

私はこのエラーを探していました。私はルアのコンテキストを生かしているので、このオブジェクトは存在しなければなりません。

助けてもらえますか?

多くの感謝:)

+0

あなたがもっとコードを投稿したなら、おそらくより良い答えが得られるでしょう:どのタイプが 'this'であるか、そしてエクスポートされたメソッドの関数宣言、それらの関数を呼び出すLuaコード。 – sbk

答えて

1

私はshared_ptr<>(this)ではなく、生のthisを使用することをお勧め。 boost::shared_from_thisが役立つ可能性があります。あなたのクラスがLuabindを使って登録されていること、class_shared_ptrで指定されていることを確認してください。

もう一つの楽しいアイデアは、あなたのLua関数がLuaテーブルとして "マップ"を生成し、それを返し、C++でそれを反復してstd::mapをビルドすることです。

1

問題を正しく理解していれば、Luaでオブジェクトを作成しているように見えます(LuaまたはC++のいずれかを使用してマップに挿入してから失われます)。もう少しコードがなければ、問題の内容を正確に伝えるのは難しいです。しかし、まず、それらのオブジェクトが実際に作成されていることを確認してから、Luaがガベージコレクションを行っていないことを確認します。 Luaがこれらのオブジェクトを実際にガベージコレクションしている場合は、C++側では表示されません。

私が助けてくれたら、私は似たようなことをするプロジェクトを完成させています。私はLuaからC++オブジェクトを作成して取得する必要がありましたが、Luaでオブジェクトを作成する代わりに、C++関数を呼び出すだけでLua呼び出し(Luabindのバインド)で必要なデータを送信しました。これらの(C++)関数は、オブジェクトをIDでハッシュテーブルに索引付けし、操作のためにオブジェクトのスクリプト側を取得する必要がある場合に備えてIDをLuaに返しました。この設定により、メモリーの内容を正しく処理しやすくなり、Luaがオブジェクトのガベージコレクションを防止します。

関連する問題