問題タブ [lua-api]
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.
c++ - ./lua/addtest.lua:9: ローカル 'testobj' (ユーザーデータ値) のインデックス作成を試みます]]
test.exe は addTest.lua を呼び出しlua_testobj
てテーブルに設定し、addTest.lua は testobj.dll を呼び出しますが、testobj.dll は "lua_testobj" を取得できません。
エラーメッセージは
addTest.lua:9 ローカル 'testobj' (ユーザーデータ値) のインデックス作成を試みます
test.exe
/li>addtest.lua コードは次のとおりです
/li>testobj.dll のソース コードは次のとおりです。
/li>
c++ - lua 関数の引数が近くにあると予想される
C++ プロジェクトで lua を使用しようとしています。lua の実行については、次のように記述します。
そして lua スクリプト:
それは機能せず、エラーメッセージが表示されました:
しかし、追加すると
lua スクリプトの最後ではうまく動作します。私は何を間違っていますか?
c - lua の lightuserdata を使用してタイマー コールバックを登録する
C タイマー (アラームではない) をラップし、それを lua 内で使用して、1 秒が経過した後にトリガーされるコールバック関数を指定できるようにしたいと考えています。複数のタイマーを使用するため、タイマーIDとコールバックをテーブルに格納するのですが、「lua_rawset」呼び出し時にセグメンテーションフォルトが発生したため、stack_dumpを使用してluaスタックをチェックすると、「lua_rawget」でnilが返されました。 66(lr_register_timer、FIXME でマーク)、ここで何が問題なのですか? すみません、私の英語は下手です。乾杯。
ルアコード:
C コード:
c - lua_Integer および lua_createtable (テーブルサイズ制限)
Lua 5.3 では、C API のテーブル関連の関数は receive と returnlua_Integer
です。
しかし、lua_createtable
それでも受け取りint
ます。
以下の関数の例では、ソース テーブルの長さを使用して、同じサイズのコピーを作成しています。
ただし、警告を消すにはキャストが必要です。
警告: 'lua_Integer' から 'int' への変換により、その値が変更される可能性があります [-Wconversion]
Luaメーリングリストで検索すると、Lua 5.2に関する次のスレッドが見つかりました(以前のバージョンにも当てはまると思います):
引用: Roberto Ierusalimschy (2012 年 8 月 7 日)
テーブルのサイズはすでに 2147483647 要素に制限されています。Lua は内部的に 'int' を使用してすべての配列にインデックスを付けます (文字列/バイト配列を除く)。どこでも符号なしの値 (size_t など) を扱うのは面倒です。ptrdiff_t には何の保証もありません。
long long
これは、 forを使用する Lua 5.3 にも当てはまりlua_Integer
ますか? int
上記の例で使用されているfromへのキャストはlua_Integer
、Lua 5.3 で安全ですか?
c++ - lua テーブルへのユーザーデータ メタテーブルの追加
ユーザーデータ オブジェクトを使用して適切に動作するスクリプト システムがあります。ただし、通常のテーブルを取ることができるユーザーデータにプロパティが必要になりました。
私がすべきことは、通常のテーブルを作成し、現在のメタメソッドのセットを使用するようにメタテーブルを設定することだと思いますが、これを行う方法を理解するのに苦労しています-単純な微調整だと確信しています。今それ。
私の既存のコードは次のようになります。
__gc
クラスを削除するためのメタメソッドがありLuaWrapped::Ptr
ます(これは a のラッパーboost::shared_ptr
です)。それはそのままにして、ポインターを通常のテーブルの lightuserdata フィールドに格納すると思います。
通常のテーブルの問題に対する実験的なカスタム メタテーブル (コメントでの議論による):
get で期待される出力:
テーブル、文字列
取得時の実際の出力 (Lua 5.2、Ubuntu 14.04):
ブール値、ユーザーデータ