2011-09-04 12 views
6

私は、luaスクリプトへの構造体ポインタ を渡し、それをluaのメンバーに渡します(読み書きのために)。luaスクリプトへのC構造体ポインタの受け渡し

例えば、c構造体のメンバを直接ポインタで上書きすることは可能ですか?これを行うには

(私はluajitを使用しています)

答えて

5

luajitにタグを付けているのを見て、他の人の言葉で述べたように軽いユーザーデータをFFIに結合することができます。http://luajit.org/ext_ffi_tutorial.html

+0

ああ、うわー。私はこれについて知らなかった。あなたがルワジットを使っているなら、これは絶対に行く方法です。 –

1

方法は、Luaのユーザデータです。いくつか例があります:linkanother link

6

ティムの答えに加えて、のライトのユーザーデータに行くことができます。あなたはLuaスタック内のデータのコピーで終わることはありません。あなたがLuaにプッシュするのはポインタです。

Luaはこのポインタに何が入っているのか、まだ有効なメモリを指しているのか、このポインタのオブジェクトにアクセスしているのかを理解していないので、Cで自分自身をすべて処理する必要があります。リスト内の項目へのポインタを送信するので、リストから項目が削除されてしまうリスクがある場合は、最初にリストを反復してポインタを検証します(リストが短い場合は大きな問題ではありません)。 Luaでポインタ内の項目にアクセスするには、Cでget/set関数を記述して、Luaから呼び出す必要があります。ポインタ値

  • lua_islightuserdata取得 - - エントリがある検証を -
  • lua_touserdataスタック上のエントリを押し

  • 関連する問題