LuaからC関数を呼び出す処理があるとします。
そのC関数に対する引数として、(別の)Lua関数自体を渡すとします。
例えば、次のようなLuaコードを書いたとします(test.lua)。
function foo() -- Cから後で呼び出されるLua関数foo : : : 何らかの処理 end function bar() -- C関数を呼び出すLua関数bar : : : 何らかの処理 cfunc(foo) -- C関数cfuncにLua関数fooを渡す : : : 何らかの処理 end
ここで、C関数cfunc()ではLuaの引数はスタックで渡されるので、
Lua関数foo自体は次のようなC関数で受け取れると思います。
LuaFunc fn; // Lua関数ポインタ(?)を保存するグローバル変数 // LuaFuncってどんな型? int cfunc(lua_State* L) { verify(lua_isfunction(L, -1)); // スタックトップにLua関数が入っていることを確認 LuaFunc fn = lua_tofunction(L, -1); // こんな関数はありませんが、 // 何らかの方法でスタックトップのLua関数を変数fnに保存 }
C言語上でグローバル変数として保存したLua関数ポインタ(のようなもの?)fnに対して、
そのLua関数を次のように呼び出したいです。
// 保存したLua関数fnを利用するC関数 void test(lua_State* L) { lua_pushfunction(L, fn); lua_pcall(L, ..., ..., ...); // Lua関数fooを呼び出すつもりだが、、、 : : : 何らかの処理 }
こんなことは可能でしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/12/23 12:07