問題タブ [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.
python - LuaはC++に組み込まれており、永続的なローカル変数を持つことができますか?そうでない場合、それを行うスクリプト言語はありますか?
LuaBindを使用してC++アプリケーションにLuaを埋め込みました。同じファイル名を実行する他のオブジェクトからアクセスできない、複数の実行にわたって持続する変数が必要です。
例:。というクラスがあるとしNPC
ます。は文字列を保持します。これNPC
は、実行するスクリプトの名前です。がNPC
作成されると、と呼ばれる変数が作成されHealth
ます。ヒットするNPC
と、体力が5減少します。Luaのスクリプトは次のようになります。
私がこれに関して抱えている問題は、このスクリプトを実行するすべてNPC
のものが、独自のヘルスインスタンスを持っていないということです。たとえば、を作成しNPC A
、そのヘルスから5を引いたとします。次に、を作成しますNPC B
。ヘルスを10にリセットするため、NPC A
ヘルスを印刷するように指示すると、5であるはずなのに、10に戻ります。
オブジェクトごとに異なるLuaインスタンスを使用すると、そのように機能しますが、その場合、一度に数百のインスタンスが作成されることになります。これは良いことではないことを理解しています。
Luaで変数をこのように機能させる方法はありますか?そうでない場合、このように効率的に機能するスクリプト言語はありますか?
参考までに、私がテストしているコードは次のとおりです。
Lua:
C ++:
c++ - luabind : 無効化された C++ オブジェクトに lua からアクセスすると、アクセス違反が発生します
エクスポートされたクラス (オブジェクト) へのメンバー関数呼び出しが有効なオブジェクトに対するものであるかどうかを luabind がチェックすることは可能ですか?
luabind を使用して lua に公開された Actor というクラスがあるとします。アクター オブジェクトをパラメータとして C++ から lua 関数を呼び出しています。関数が終了する前に、スクリプトの書き込みによってアクター オブジェクトがグローバル lua 参照に配置され、後でアクセスできるようになります。
その後、アクター オブジェクトが C++ サイトから削除され、無効化されたアクター オブジェクト (そこからの任意のメソッド) にアクセスしようとする別の関数が呼び出されます。明らかに削除されているため、クラッシュ (アクセス違反) が発生します。
サンプル:
ここでは NIL チェックは役に立ちません。これは luabinds サイトでチェックできるものですか? 関数は lua_pcall(....) を使用して実行され、スタックトレースは luabinds call.hpp results = Maybe_yield(L, lua_gettop(L) - arguments, (Policies*)0); でエラーを示します。
そうでない場合、スクリプトを書いている人がこれらの問題を作成できないようにする別の解決策はありますか?
c++ - luabind - 引数が 10 個を超える関数
luabind で 10 個を超える引数を持つ関数を使用したいのですが、C2784 および C2780 コンパイラ エラーが発生します (VS2012 Express)。
問題は、使用するブースト ライブラリの制限のようです。luabind では LUABIND_MAX_ARITY オプションを設定できますが、boost で何ができるかによって異なります。どうすればこの制限を克服できますか?
ありがとう!
コード:
関数insertIntfStatsには約 20 個の std::string 引数があり、他には何もありません。他の 2 つの関数の引数は 8 つ未満です (std::string も同様)。「.def("insertIntfStats", &WkmParserDB::insertIntfStats)」という行にコメントを付けると、コンパイルして動作します。
エラー:
luabind - Luabind pure_out_value がコンパイルを拒否する
関数の 'pure_out_value' プロパティで Luabind を動作させるのに問題があります。私の場合、Luabind はコンパイル中に、プロパティを使用するために必要な特定の関数がテンプレートに含まれていないというエラーを出しています。
使用されているコードは、Luabind に付属する test_policies.cpp のコードと非常によく似ています。
これをコンパイルしようとすると発生するエラー:
環境に関する情報:
- Lua 5.1.4 (ビット単位のパッチあり)
- ルバインド 0.9.1
- ブースト 1.53
- Visual Studio 2012 w/Update 1 (v110_xp 設定でコンパイル)
また、5.2 用の既知のパッチ適用済みバージョンの Luabind (まだ 5.1 もサポートしています) を試してみました 。
Luabind の残りの部分は正常に動作しているように見えますが、pure_out_value ポリシーだけではありません。
c++ - Luabindを使用して保存されたC++オブジェクトポインターを比較すると、Lua関数がクラッシュします
LuabindとC++を使い始めたばかりです。私の目標は非常に単純です。
C ++オブジェクトポインターを引数として取り、オブジェクトをLua変数に格納するLua関数を作成したいと思います。Lua関数が呼び出されるたびに、最初に、Lua関数に渡されたオブジェクトポインターが、前の呼び出し中に保存されたものと同じオブジェクトポインターであるかどうかを確認する必要があります。
完全なコードは次のとおりです。
このプログラムを実行すると、次の出力が表示されると思います。
ただし、プログラムを実行すると、「x」と「v」の比較中にLua関数を2回呼び出したときにクラッシュします。これは、プログラムからの実際の結果の出力です。
見てわかるように、比較は、「v」が設定される前と後の両方の最初の関数呼び出し中に機能します。ただし、最初の比較は、呼び出された2番目の関数の実行中に失敗します。
私は信じられないほど明白な何かを見逃しているに違いありませんが、それが何であるかを本当に理解することはできません。誰かが私が間違っていることを見ることができますか?どんなアドバイスも大歓迎です!
マーティン、ありがとうございました
c++ - Luabind プロパティを機能させるにはどうすればよいですか?
クラスをインポートするときに Luabind のプロパティを使用しようとしています。定義はすべて正しいと確信していますが、文字列または数値の場合に出力するなど、プロパティを呼び出すと、次のような結果が得られます
機能: 009EC440
なぜこれが起こっているのかわかりませんが、インターネットで調べてみると、同じ問題を抱えている人が何人か見つかりました。彼らは、次のパラメーターを使用して Luabind をビルドする必要があると言います。
bjam ツールセット=msvc-9.0 バリアント=デバッグ スレッド化=マルチ リンク=共有定義=_BIND_TO_CURRENT_VCLIBS_VERSION
これを試してみましたが、それでも同じエラーが発生します。注意すべきもう 1 つのことは、私は MSVC 2012 を使用しているため、toolset=msvc-11.0 でビルドしようとしましたが、やはり役に立ちませんでした。プロジェクトのビルドに Boost ビルドを使用していない場合は、LUABIND_DYNAMIC_LINK を定義する必要があることを読みました。これはまだこのエラーを引き起こしています。私も自分で Luabind を構築しようとしましたが、多くのシンボル エラーが発生するため、リンクに問題が発生しました (LUABIND_DYNAMIC_LINK を定義する場所がわからないため、誰かがこれを知っていれば問題が解決する可能性があります)。この問題を解決する方法を知っている人はいますか?
プロパティを宣言するコードは次のとおりです。
そして、コンストラクターで宣言されたように、武器は Weapon クラスのインスタンスであり、次のようにアクセスしようとしています。
静的リンクは機能しますが、次のパラメーターを使用して動的リンクで機能させたいと思います。
bjam ツールセット=msvc-9.0 バリアント=デバッグ スレッド化=マルチ リンク=静的定義=_BIND_TO_CURRENT_VCLIBS_VERSION
c++ - luabind を使用してスクリプト内でファイルを正しくロードするにはどうすればよいですか?
Lua をゲームに埋め込もうとしています。私がやりたいことは、フォルダー内のすべてのファイルをロードし、C++ 側に保存されるそれらのファイルに基づいてオブジェクトを作成するロード関数を作成することです。ただし、dofile のようなものを使用すると、そのファイルにある変数ですべてが汚染されます。このインポートをローカルに変更するにはどうすればよいですか?
c++ - Luabind: shared_ptr を返すことができません
Luabind でバインドされたメソッドから std::shared_ptr を返そうとしていますが、型を認識していないようです。
ルバインドコード:
作成文字コード:
このメソッドを Lua スクリプトで呼び出すと、何も返されず、そこで実行が停止します。ただし、Character* を返すようにメソッドを変更すると、期待どおりに動作します。グーグルで調べてみると、shared_ptrを返すことは問題にならないはずです。
私は何を間違っていますか?
また、Luabind が std::shared_ptr を理解できるように、次のコードがあります。
c++ - C++ オブジェクトから別の C++ オブジェクトへのポインターを使用して、Lua からメンバー変数を変更する
Luaスクリプト内で、別のC++オブジェクトからC++オブジェクトへの参照を取得するにはどうすればよいですか? それを言葉で適切に要約する方法がよくわからないので、最初にLuaの例で詳しく説明しましょう。
a は C++ オブジェクトであり、関数 getComponent はポインターを返します。
問題はgetComponent()
、参照ではなく Component オブジェクトのコピーを Lua に渡すことです。ポインターを返すすべての関数で同じ問題が発生します。Lua は元のオブジェクトを変更できません。
オブジェクト a は正しく動作しているようです。Lua 内から変数を変更すると、その結果が C++ にミラーリングされます。A とコンポーネントの両方がすでに Lua にバインドされており、必要なメソッドもバインドされています。
構文的に何かが欠けていますか、それ以上のものがありますか?
luabind、Lua 5.1、および MinGW を使用しています。事前に助けてくれてありがとう。
編集
これが luabind コードです。問題とは関係のないバインドが他にもたくさんあるため、要約しました。