問題タブ [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 に答える
3055 参照

c++ - C++ で Lua オブジェクト インスタンスへのポインタを取得する

Luabindを使用して、C++ から Lua に基本クラスを公開し、そこから Lua のクラスを派生させることができます。この部分は正しく機能し、Lua の派生クラスから C++ メソッドを呼び出すことができます。

次に、C++ プログラムで Lua ベースのインスタンスへのポインターを取得します。

C++ -> バインディング

Lua ベースの派生クラス

ここで、Lua から作成された次のオブジェクトがあるとします。

そのオブジェクトの参照を C++ の基本クラスへのポインタとして取得するにはどうすればよいですか?

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

c++ - std::string& を使用した Luabind 関数 & pure_out_value ポリシーでの参照は不可能ですか?

関数から文字列を返そうとしていますが、コンパイルできません。std::string& タイプを int& に置き換えるとコンパイルされますが、さらにブール値に std::string を返したいのですが、どうすればよいですか?

...

ルアで:

luabind 0.8.1、最新の Lua、boost 1.4、VC++ 2008 を使用しています。

次のコンパイラ エラーが発生します ( std::string& のサイズを特定できないようです ?


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

memory-leaks - Lua で参照が失われる

オブジェクトに問題があり、もう必要ありませんが、まだ参照があります。結果: オブジェクトが収集されていないため、割り当てられたメモリのサイズが常に増加しています。

この種の問題を解決するにはどうすればよいですか?参照が 1 つしかないオブジェクト、またはライフタイムが特定の値よりも長いオブジェクトを見つける方法はありますか? または別の解決策はありますか?

Lua 5.1 と C++ を luabind で使用する。

ありがとう。

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

c++ - luabind::object の逆参照の問題 (簡略化)

C++lua5.1luabind 0.7を使用

ルアコード:

C++ コード:

結果: Lua にはまだ 8Mb のメモリが割り当てられています。ガベージ コレクションは、そのテーブル オブジェクトを無視します。それはどこかに参照がありますか?しかしここで?そのテーブルは、プログラムの終了時 (「lua_close」関数が呼び出されたとき) にのみ割り当てを解除します。この問題を解決するには?

ありがとうございました。

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

c++ - 親を持つ lua クラスを luabind::object に格納する

C++lua 5.1luabind 0.7-0.81を使用

親を持つ lua クラスを作成し、それを luabind::object に格納しようとしています。

ルア

C++

出力:
init
親 init
before GC
after GC

結果: obj が破棄された後、'TestClass' インスタンスはガベージ コレクション サイクル後も存続します (__finalize メソッドは呼び出されず、メモリは解放されません)。プログラムの終了時にのみ破棄されます。
さらに、親なしでクラスを使用すると、ガベージが正しく収集されます。

採用ポリシーを使用しようとすると(作成されたオブジェクトの所有権を取得するため)

私は得る:

  • luabind 0.7 - ポリシーを採用しない場合と同じ結果
  • luabind 0.81 - 「登録されていないタイプを使用しようとしています」というメッセージが表示されてクラッシュ する

C++ で lua オブジェクトを正しく作成し、その所有権を取得するにはどうすればよいですか?

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

scripting - Luabind クラス導出の問題 (メモリ「リーク」)

luabind 0.81 の使用

問題を説明する簡単なテスト:

1)

出力:
A init
A finalize

2)

出力:
A init
B init

問題:親を持つクラスがガベージ コレクションで削除されません。

この問題を解決するには?ありがとうございました。

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

c++ - LuaBind を使用して C++ クラスを Lua にエクスポートするとアクセス違反が発生する

LuaBind を使用して単純なクラスを Lua にエクスポートしようとしています。ほぼ同じ方法を示した 2 つのサイトからコードを取得しましたが、まだ失敗しています。

そのコードを実行すると、luabind::module によって次のランタイム エラーが発生し、デバッグ モードでは他の情報はありません。

Lua Playground.exe の 0x690008f5 で未処理の例外: 0xC0000005: アクセス違反。

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

c++ - Problem in luabind with default_converter and tables

===Edit===

The problem is actually much simpler than this, any wrapped function that takes a table is causing the problem. If I wrap a function that takes luabind::object, and call that function with a table argument, then the gc causes an invalid free(). I'm starting to think that this may be some kind of crazy compilation/linking problem, as my compiled luabind dylib has lua symbols in it (resulting in two copies of those symbols, one in that library and one in my binary). Maybe I have duplicates of some lua static variables or something? I might just be grasping at straws here.

===Edit===

Using luabind 0.9 and gcc 4.2.1 on mac os x 10.6

I'm seeing what could (maybe?) be a problem with using a default_converter from lua tables.

I'm trying to define converters for various list-like types in my code, specifically std::vector. When I pass a table to a c++ method with such a default_converter, lua crashes with free() on an invalid pointer as soon as the garbage collector is called.

I'm probably missing something simple here, but I can't figure it out.

Thanks!

* Lua Code *

* C++ Code *

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

lua - Luabindは条件付きでLua関数を呼び出します

Luabindを使用するコードがあり、_Gテーブルに関数が存在する場合は(C ++から)関数を実行する必要がありますが、それ以外の場合は何もしません。関数が_Gに存在するかどうかを検出するにはどうすればよいですか?

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

c++ - Luabind と C++ を使用してアセット管理クラスを作成するにはどうすればよいですか?

これを機能させるために数え切れないほどの試みをしましたが、実行時にエラーが発生します。ゲーム エンジンのコンテンツを管理するアセット マネージャーを作成しようとしており、スクリプトには lua と luabind を使用しています。すべてをコンパイルし、クラスと変数をバインドし、lua から基本的な変数を取得することは、これまでのところ問題ありませんでした。

私の問題は、資産クラスのインスタンスを格納するために std::vector を使用していて、ベクトルが luabind とうまくいかないように見えることです。私の C++ プログラムはレンダリングなどに使用するため、このベクターが必要になることはわかっています。

マネージャー クラスと変数 (資産クラスを含むベクターを含む) をバインドすると、すべてが正常にコンパイルおよび実行されます。私の lua スクリプトでは、新しいオブジェクトを正常に作成できますが、それらにアクセスしようとすると実行時エラーが発生します。

すべてを要約するには:

ゲーム オブジェクトの情報またはその他のデータに関する情報を保持するクラスがあります。

アセット クラスのベクトルを含む別のクラスがあります。

通常の lua テーブルと同じようにこのベクトルにアクセスしようとすると、実行時エラーが発生します。

では、アセット マネージャー クラスのクラスを変更できるようにするには、C++ と luabind で何をすればよいでしょうか?