c调用lua函数 double f (double x, double y) { double z; /* push functions and arguments */ lua_getglobal(L, "f"); /* function to be called */ lua_pushnumber(L, x); /* push 1st argument */ lua_pushnumber(L, y); /* push 2nd argument */ /* do the call (2 arguments, 1 result) */ if (lua_pcall(L, 2, 1, 0) != 0) error(L, "error running function `f': %s", lua_tostring(L, -1)); /* retrieve result */ if (!lua_isnumber(L, -1)) error(L, "function `f' must return a number"); z = lua_tonumber(L, -1); lua_pop(L, 1); /* pop returned value */ return z; } lua调用c函数 lua_pushcfunction(l, l_sin) //获取c函数的指针,并在lua中创建一个function类型的值来表示这个函数 lua_setglobal(l, "mysin") //赋值给全局变量mysin static const struct luaL_reg mylib [] = { {"dir", l_dir}, {NULL, NULL} /* sentinel */ }; int luaopen_mylib (lua_State *L) { luaL_openlib(L, "mylib", mylib, 0); return 1; } 向lua中注册类 向lua中注册类对象 向lua中注册全局对象