1); /* 获取一个参数 */ lua_pushnumber(L, sin(d)); /* 将结果压入栈 */ return 1; /* 返回结果的数目 */ } 假如我们使用pushcfunction将这个函数压入栈并使用lua_setglobal给它设置一个名称叫my_sin,那么在注册之后在Lua中可以这样使用: a=my_sin(2) Lua调用这个函数...
lua_pushnumber(l, max(num1, num2)); return 1; } 3.注册成C函数 lua_pushcfunction(L, l_max); lua_setglobal(L,"mymax"); 4.Lua中调用(test.lua) d = mymax(340,37);io.write(d) 完整的C函数 #include"lua.h"#include"lualib.h"#include"lauxlib.h"double max(double a, double b)...
int index); const char * lua_tostring (lua_State *L, int index); const char * lua_tolstring (lua_State *L, int idx, size_t *len); size_t lua_strlen (lua_State *L, int index); lua_CFunction lua_tocfunction (lua_State *L, int idx); void * lua_touserdata (lua_State *L...
所有可被lua调用的函数型为 typedef int (*lua_Cfunction)(lua_State*L) 例如 static int l_sin(lua_State *L) { double d = lua_tonumber(L,1); lua_pushnumber(L,sin(d)); return 1; } 1. 2. 3. 4. 5. 6. 7. 其中返回值是其压入栈的函数返回值的数量 2.然后将函数置入栈中 lua_pu...
lua_pushstring(lua_State* L, const char* s) 说明:将一个 C 字符串(以空字符结尾的字符串)压入堆栈。 参数: L:Lua 状态(Lua 虚拟机实例)的指针。 s:要压入堆栈的 C 字符串。 最佳实践:使用该函数将 C 字符串压入堆栈,可以供 Lua 脚本使用。
lua_pushcfunction lua_pcall lua_register luaL_requiref luaopen_xxx 错误处理函数 lua_error lua_gettop lua_settop 内存管理函数 lua_newuserdata lua_getmetatable lua_setmetatable 以下是 Lua C API 中涉及到 Lua 状态管理、栈操作、全局变量操作、表操作、函数操作、模块操作、错误处理和...
2. int lua_pcall(lua_State *L, int narg, int nresults, int errfunc);:这个函数与lua_call类似,但它还允许设置错误处理函数,如果函数调用失败,Lua会调用这个函数处理错误。3. lua_pushcfunction(lua_State *L, lua_CFunction f);:将C函数压入栈中,以便在Lua中调用。4. lua_register...
** 0 - Lua function ** 1 - light C function ** 2 - regular C function (closure) */ /* Variant tags for functions */ #define LUA_TLCL (LUA_TFUNCTION | (0 << 4)) /* Lua closure */ #define LUA_TLCF (LUA_TFUNCTION | (1 << 4)) /* light C function */ ...
typedef int (*lua_CFunction) (lua_State *L); 也就是说,在C++中定义函数时必须以lua_State为参数,以int为返回值才能被Lua所调用。由于lua_State是支持栈的, 所以通过栈可以传递无穷个参数, 大小只受内存大小限制,而返回的int值也只是指返回值的个数真正的返回值都存储在lua_State的栈中。看以下示例: ...
add.lua放到与C同级的目录下,里面写一个简单的函数,让C调用 function add(x,y) return x + y end 好了,终于到了用GCC编译的阶段了,直接gcc add.c一下看看行不行。 果然报错了! 这是因为没有把add.c里面的函数链接到我们前面编译出来的lua库里导致的。怎么让他指定链接哪个库呢?看GCC的文档得知-l参数可...