luaとC連携
luaのビルド(mingw + MSYSで)
Lua: download
MinGW - Minimalist GNU for Windows download | SourceForge.net
msys上でconfigure後、makeで簡単に出来た
cからluaを呼ぶテスト
http://someiyoshino.cool.ne.jp/insideyanesdk/wiki/wiki.cgi?page=Lua
- cのソース
#include "lua.h" #include "lualib.h" #include "lauxlib.h" int main(int argc,char* argv[]) { lua_State *L=lua_open(); lua_dofile(L,"test.lua"); lua_getglobal(L,"foobar"); lua_pushnumber(L,5); lua_pushnumber(L,7); lua_call(L,2,1); printf("%f\n",lua_tonumber(L,1)); return 0; }
all: gcc -IC:/lua-5.0.2/include -LC:/lua-5.0.2/lib luatest.c -llua -llualib
- luaのソース
function foobar(x,y) return x*y end
luaからcを呼ぶテスト
- cのソース
#include "lua.h" #include "lualib.h" #include "lauxlib.h" // テスト関数 static int foo (lua_State *L) { int n = lua_gettop(L); /* 引数の数 */ lua_Number sum = 0; int i; for (i = 1; i <= n; i++) { if (!lua_isnumber(L, i)) { lua_pushstring(L, "関数`average´の引数が正しくない"); lua_error(L); } sum += lua_tonumber(L, i); } lua_pushnumber(L, sum/n); /* 最初の戻り値 */ lua_pushnumber(L, sum); /* 二番目の戻り値 */ return 2; /* 戻り値の数 */ } // 関数登録マクロ #define lua_register(L,n,f) \ (lua_pushstring(L, n), \ lua_pushcfunction(L, f), \ lua_settable(L, LUA_GLOBALSINDEX)) int main(int argc,char* argv[]) { lua_State *L=lua_open(); luaopen_base(L); luaopen_string(L); luaopen_table(L); luaopen_math(L); luaopen_io(L); lua_register(L, "average", foo); lua_dofile(L,"test.lua"); return 0; }
all: gcc -IC:/lua-5.0.2/include -LC:/lua-5.0.2/lib luatest.c -llua -llualib
- luaのソース
print(average(2, 4));