lua和c交互

http://blog.csdn.net/musicvs/article/details/8440707

C调用Lua函数
首先要进行Lua的初始化,这个主要是lua_open和luaL_openlibs函数
然后是解析并编译lua的代码,这个主要是luaL_dofile函数
解析好之后使用lua_getglobal指明要调用的lua函数
如果有lua函数的参数,通过使用lua_pushstring函数传递参数
最后调用lua_pcall进行lua函数的调用
调用完成之后采用lua_tonumber类函数可以获取到函数的返回结果

 lua_State *L = luaL_newstate();
 int err = luaL_dofile(L, "hello.lua"); 

 lua_getglobal(L, "helloadd");
 lua_pushnumber(L, 10);
 lua_pushnumber(L, 5);

 lua_call(L, 2, 1);
 int result = lua_tonumber(L, -1);

 

Lua调用C函数
在Lua中调用C的函数,该函数必须进行注册,这个通过lua_register这个函数来完成
在Lua中调用注册的函数,会调用上面注册的函数(类似于回调),所有的处理在这个函数里面
这个函数里面可以使用lua_tostring类函数来获取函数的参数
如果有返回值,通过lua_pushnumber这个函数来返回。

 lua_settop(L, 0);
 lua_pushcfunction(L, cpsum);
 lua_setglobal(L, "cpsum");
 lua_getglobal(L, "luasum");

 lua_pushinteger(L, 3);
 lua_pushinteger(L, 5);
 lua_pcall(L, 2, 1, 0);
 int sum = lua_tointeger(L, -1);

 堆栈的索引方式有两种,一种是正数索引,一种是负数索引。

1. 正数索引,栈底是1,然后一直到栈顶是逐渐+1,最后变成9(9大于1)

2. 负数索引,栈底是-9,然后一直到栈顶是逐渐+1,最后变成-1(-1大于-9)

posted on 2014-05-04 14:52  kangbry  阅读(202)  评论(0)    收藏  举报

导航