C和lua交互
2014-02-17 11:14
253 查看
C调用LUA函数
query.c #include <lua.h> #include <lualib.h> #include <lauxlib.h> int main(int argc, char* argv[]) { lua_State* L = lua_open(); luaL_openlibs(L); luaL_dofile(L,"query.lua"); //加载脚本并实例化,相当于loadfile并pcall一次 lua_getglobal(L, "query_Id"); //加载lua脚本中的函数名 lua_pcall(L, 0, 0, 0); //调用lua中的该函数 return 0; }
query.lua function query_Id() print("Id is 111") endlua_pcall函数解析:http://manual.luaer.cn/lua_pcall.html
lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
nargs is the number of arguments that you pushed onto the stack. The number of results is adjusted to
nresults.
nargs是输入参数的个数,nresults是返回值的个数。
luaL_dofile函数解析:
int luaL_dofile (lua_State *L, const char *filename);
Loads and runs the given file. It is defined as the following macro:
(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))It returns 0 if there are no errors or 1 in case of errors.
lua_getglobal函数解析:
LUA解释器的工作机制,LUA解释器自身维护一个运行时栈,通过这个运行时栈,LUA解释器向主机程序传递参数,所以我们可以通过这个运行时栈得到LUA脚本中变量的值。
lua_getglobal将LUA的一个全局变量放到栈顶。
LUA调用C函数
query.c #include <lua.h> #include <lualib.h> #include <lauxlib.h> struct get_ret_data{ int exist_flag; char ret_str[4096]; int ret_len; }; struct get_ret_data hget_ret; int read_dba_C(lua_State *L){ int flag = lua_tonumber(L, 1); //lua传递的第一个参数 lua_pushlstring(L, get_ret.ret_str, get_ret.ret_len); //返回给lua的值 lua_pushnumber(L, mem_num); //返回给lua的值 return 2; //返回值的个数 } int main(int argc, char* argv[]) { lua_State* L = lua_open(); luaL_openlibs(L); luaL_dofile(L,"query.lua"); //加载脚本并实例化,相当于loadfile并pcall一次 lua_register(L,"read_dba",read_dba_C); //注册函数,使得lua中可以调用C函数 lua_getglobal(L, "query_Id"); //加载lua脚本中的函数名 lua_pcall(L, 0, 0, 0); //调用lua中的该函数 return 0; }
query.lua function query_Id() local flag = 1 local buf,num = read_dba(flag) print(buf,num) end
相关文章推荐
- QuickLuaTour
- LeetCode150:Evaluate Reverse Polish Notation
- lua工具库penlight--01简介
- LeetCode OJ --问题与解答 Evaluate Reverse Polish Notation
- 【华为存储】关于ALUA详解
- 游戏服务器之第三方库tolua++的使用
- LeetCode OJ--Evaluate Reverse Polish Notation
- 一些LUA函数(转载)
- 深入浅出游戏算法(3)-lua脚本(5)
- lua堆栈
- 深入浅出游戏算法(3)-lua脚本(4)
- Excel 文本算式计算 利用公式EVALUATE (亲自实践)
- Lua查找表元素过程(元表、__index方法是如何工作的)
- Lua中的数学库
- Lua学习随笔之loadstring
- lua class(table)
- lua 01 入门
- 深入浅出游戏算法(3)-lua脚本(3)
- lua data structure
- LUA io.input,io.output,io.write,io.read之间的关系