問題タブ [luabind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2606 参照

c++ - WindowsでのLuabindの構築

VS2010を使用してWindows7でLuaとLuabindを機能させるのに問題があります。これまでのところ、LuaBinariesをhttp://luabinaries.sourceforge.netからダウンロードし、Luabindをhttp://www.hci.iastate.edu/からダウンロードしました。 〜rpavlik / doxygen / luabind/docs.html。LuabindのINSTALLファイルに記載されているように、コマンドラインで環境変数BOOST_ROOTとLUA_PATHを適宜設定しましたが、このエラーを回避できません。

誰かがWindowsでLuabindを構築できたなら、どんなヒントも大歓迎です!さらに、Lua&Luabindを使用してVS 2010 C ++プロジェクトをセットアップでき、共有してくれる人がいれば、私は感謝しています。

0 投票する
1 に答える
642 参照

c++ - Luabind:パラメーターとしての派生クラス

私は最近、ソフトウェアに統合することを目的としてLuabindを学んでいます。私はいくつかの問題に遭遇しました、そして私はLuabindのRasterbar Softwareのドキュメントを見てきました、そしてそれを解決することができませんでした。基本的に、文字列と抽象基本クラスをパラメーターとして受け取る関数を公開しています。まず、これが正しい方法で行われているのか、これが機能するためにluaで特別な処理が必要なのかがわかりません。とにかく、ここにコードがあります

BaseFactoryは、UIComponent(ボタン、テキストなど)を返す抽象基本クラスであり、基本的にそのようにインスタンス化できるTemplateFactoryと呼ばれるファクトリを派生させました。

次に、これらを次のようにC++のUIFactoryに渡します...

luabindで..。

そしてluaで...

その最後の行は実行されません。ボタンファクトリとuiファクトリが作成されていることを確認しました。足りないものはありますか?

ヘルプは大歓迎です。

0 投票する
2 に答える
609 参照

c++ - C++からluaへの2次元配列

では、C ++からLuaに多次元配列を渡すことは実際に可能ですか?

それとも、通常の配列にして、Luaに渡し、そこで2D配列に再度変換する必要がありますか?

そして、可能であれば、私はこれを持っていると言うことができます

0 投票する
1 に答える
1350 参照

c++ - luabind: 非組み込みクラスによってインデックス付けされたテーブルから値を取得できません

私は、Lua 5.1、Win XP SP3 の cygwin + 最新パッチ x86、ブースト 1.48、gcc 4.3.4 を含む Ryan Pavlik のマスター ディストリビューションの luabind 0.9.1 を使用しています。Lua と boost は cygwin のコンパイル済みバージョンです。

静的バージョンと共有バージョンの両方で luabind のビルドに成功しました。

両方のバージョンで失敗する test_object_identity.cpp テストを除いて、両方のバージョンがすべてのテストに合格します。

問題を次の問題に突き止めました。テーブル内のエントリが非組み込みクラス (つまり、int、string などではない) に対して作成された場合、値を取得できません。

これを示すコードは次のとおりです。

tabc[1] は確かに 10 ですが、tabc[temp_object] は 30 ではありません! (実際にはゼロのようです)

ただし、 iterate を使用して tabc エントリを調べると、正しいキーと値のペアを持つ 2 つのエントリがあります。

何か案は?

ところで、次のように == 演算子をオーバーロードします。

結果は変わりません。

[] 演算子から settable() と gettable() に切り替えてみました。結果は同じです。キーのデフォルトの変換が呼び出されていることをデバッガーで確認できるので、そのどこかでエラーが発生していると思いますが、正確に何が問題なのかを理解することはできません。

次の簡単なテスト ケースが示すように、複合型の Luabind の変換には間違いなくバグがあります。

うまくいけば、私より賢い誰かがこれを理解できるでしょう、Thx

複雑な値をキーとして使用するたびに Luabind が NEW DISTINCT オブジェクトを作成するという事実に問題を突き止めました (ただし、プリミティブまたはオブジェクトを使用する場合はそうではありません)。

これを示す小さなテスト ケースを次に示します。

tabc[tp] が最初に値 5 を持ち、キー オブジェクトを介してアクセスされると 7 で上書きされることに注意してください。ただし、tp を介して AGAIN にアクセスすると、新しいエントリが作成されます。これが、その後 gettable() が失敗する理由です。

Thx、デビッド

0 投票する
1 に答える
2646 参照

c++ - 継承による luabind と std::shared_ptr の使用

私は多くのことに依存する API (特定の GUI ライブラリ) を持っていますstd::shared_ptr。つまり、多くの場合、関数パラメーターとして使用され、他のオブジェクト内に格納されます。たとえば、スプリッターやボックスなどのコンテナー ウィジェットは、子ウィジェットを に格納しますshared_ptr。次に、この API を luabind を介して Lua にマップしたいと思います。理想的な世界では、Luabind は shared_ptrs で新しいオブジェクトを作成し、それらを shared_ptr パラメーターを受け取る関数に直接渡すことができるようにします。これは、たとえば次のような単一のクラスで機能するようです。

そのように宣言している間、 のような関数を公開して使用できますvoid foo(std::shared_ptr<Button> const&)

luabind のマニュアルでは、クラスの階層を使用するには、階層内のすべてのクラスに同じ shared_ptr テンプレート インスタンスを使用する必要があると記載されています。

これで、呼び出すことができなくなりましfooた。Lua から関数を見つけることができなくなります。luabind がshared_ptrs でのボタンの受け渡しを引き続きサポートするようにすることはできますか? また、階層内のすべてのクラスに対して、基本クラスのポインターに変換できるのではなく、同じスマート ポインターを使用するように luabind が義務付けている理由を知りたいです。

0 投票する
1 に答える
715 参照

c++ - スクリプトがリロードされたときにコールバックが更新されるように、Lua のコールバック関数にリンクするにはどうすればよいですか?

LuaBind を使用して自分のゲームに Lua スクリプトを実装していますが、明確でないことの 1 つは、ゲーム内でスクリプトをライブでリロードするロジスティクスです。

現在、LuaBind C++ クラスluabind::objectを使用して、Lua コールバックへの参照を、それらを使用するクラスに直接保存しています。次にluabind::call_function、そのオブジェクトを使用して、C++ コードから Lua コードを呼び出すことができます。

これはまだテストしていませんが、スクリプトをリロードすると、すべての関数が再定義されると思いますが、古い関数への参照はluabind::object、C++ コードによって保持される形式で引き続き存在します。ゲーム内のスクリプト フックごとに手動で管理する必要なく、古いものを新しいものに交換できるようにしたいと考えています。

プロセスが機能するようにこれを変更するにはどうすればよいですか?

私が最初に考えたのは、関数への参照を直接保存するのではなく、代わりに関数名を保存し、呼び出すたびに名前で関数を取得することです。より良いアイデアを探しています!

0 投票する
1 に答える
5084 参照

lua - LuaBindとpackage.loadlib

ここhttp://www.rasterbar.com/products/luabind/docs.htmlでluabindを使用してチュートリアルを実行しようとしていますが、ライブラリのロードに問題があります。私は現在luaのバージョン5.1を使用しているので、loadlibの代わりにpackage.loadlibを使用すると思います。私はこれである単純なdllを作りました:

これは問題なく構築されます。ただし、このコードを実行しようとすると、luaでエラーが発生します。

あいさつはゼロだと書いてあります。dllから関数を正しくロードするにはどうすればよいですか?

0 投票する
1 に答える
1378 参照

c++ - メタデータを使用したLuaコールバック

Luaでスクリプター用にいくつかの関数をセットアップしたいのですが、それらの関数が呼び出されたときに、定義したパラメーターを使用して実際に1つの関数を呼び出してもらいたいのです。これは次のようになります。

Lua:

C ++:

}

だから私はセットアップで少し混乱しています。コールバックをパラメータで登録しようとしています。これは私がこれまでに持っているものであり、関数登録でパラメータを保存していないものがあります。追加した最後のパラメータのみを保存しているようです。

luaがコールバックを呼び出すと、常にvalue [1]が表示され、value[0]は表示されません。コールバックを登録してからテーブルを追加するという概念で遊んだのですが、これでさらにうまくいくかどうかはわかりません。

理由について:私はluaプログラマーのためにコードを書くのを簡単にするために関数名を抽象化しようとしていますが、それらは単に同じパラメーター化された関数に変換する必要があります。単一のパラメータを渡すことで設定の変更を追加することを考えてください。ただし、名前は異なります。

考え?

0 投票する
1 に答える
2935 参照

c++ - luaテーブルをC++から.Luaスクリプトに渡す

私はこれを解決するために過去6時間を費やしました!そして私はどこにでも行くことができません:s

c ++ファイルでluaテーブルを作成し、それを次のlua関数を持つluaスクリプトファイルに渡すことができるようにしたいと思います。

2つの文字列を含む1次元配列を動的に作成しました。

これで、スタックの一番上にテーブルができました。私はこれを書くことによってそれを検証しました:if(lua_istable(L、lua_gettop(L))) `1を返しました、これはそれがテーブルであることを意味します。

それから私はこれをしました:

そのため、次のエラーが発生しました: スクリプトの実行に失敗しました:テーブル値を呼び出そうとしました

このファイルには、C++から正常に呼び出している他のいくつかの関数があることに注意してください。

誰かが私がこのエラーを解決するのを手伝ってくれますか?これはLUAのバグでしょうか?cz私は手順を非常に正しく実行しました...私は推測します!

0 投票する
1 に答える
1119 参照

c++ - lua+luabind、「ランタイム エラー」の後、スタックの一番上にエラー情報がない

lua をゲーム エンジンに埋め込もうとしています。今まではすべてうまくいきました。ゲーム エンジン (例: move_object(id, x, y)) とやり取りする関数の登録を開始しましたが、登録は正常に機能しました。次に、次のように使用してみました。

これにより、luabind から「実行時エラー」例外が発生します。どこでも検索しましたが、インターネット (および luabind ソース) によると、エラー メッセージはまだ lua スタックの一番上にあるはずです。luabind::error をキャッチして、スタックの一番上を次のように出力してみました。

そしてこのように:

両方ともこれを印刷します:

これは、ハンドラー テーブルから更新関数を呼び出したときにプッシュされた最後の値であると想定しています。この値は、エラーが発生したときに、詳細なエラー文字列で上書きされているはずですよね? luabind ソース ファイル "error.hpp" によると、次の定義がありclass errorます。

私の lua コードの問題は、実際には move_object 関数の登録にあると思います (更新関数が実行されます。以前にその print 呼び出しのコメントを外したので、これはわかっています)。ハハハ

それが助けになるなら、私はエラーを修正しました。次のように move_object 関数を定義していました。

しかしどうやら、静的メンバ関数を luabind で通常の関数として定義することはできません。これを次のように変更しました ( move_objectC++ で通常のグローバル関数を作成しました)。

それが元の問題に役立つかどうかはわかりませんが、より多くの情報が害になることはないと思いました! :)