Lua から C の関数をコールする - C に Lua を組み込む
Lua側から呼び出す関数名と呼び出される関数を lua_regster() で登録する。
すると、登録した名前で Lua から呼び出せるようになります。
今回は、Lua から受け取った引数の数とそれぞれの型を出力しています。
スタック操作のインデックスは 1 からなので注意。
ソースコード
#include <stdio.h> #include <stdlib.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" int lua_argument_type(lua_State *L); int main (int argc, char *argv[]) { lua_State *L; if (argc < 2) { fprintf(stderr, "usage: %s filename\n", argv[0]); exit(1); } L = luaL_newstate(); luaL_openlibs(L); // Lua側から呼び出す関数名と呼び出される関数を登録する。 lua_register(L, "argument_type", lua_argument_type); if (luaL_dofile(L, argv[1])) { fprintf(stderr, "error: %s\n", lua_tostring(L, -1)); lua_close(L); exit(1); } lua_close(L); exit(0); } int lua_argument_type(lua_State *L) { int n, i, type; // 引数の数(スタックにある要素の数)を取得する n = lua_gettop(L); printf("number of arguments: %d\n", n); for (i = 0; i < n; i++) { // インデックスの開始は 1 から type = lua_type(L, i + 1); printf(" %d) %s(%d)\n", i + 1, lua_typename(L, type), type); } return 0; }
Lua コード
t = {}; function foo (x, y) return x + y; end argument_type("a", false, 20, t, nil, foo);
実行結果
number of arguments: 6 1) string(4) 2) boolean(1) 3) number(3) 4) table(5) 5) nil(0) 6) function(6)