用原生API来交互 lua是通过lua_state这个栈来和c 交互的 - 1.....lua栈 index 下往上增长 如: 1 2 3 4 5 6
- 2.....lua栈 index 是循环的 如下 index 上到下 是 3 2 1 0 -1 -2 -3 ,栈对应的值为
- 1
- 2
- 3
- x
- 1
- 2
- 3
-
- 3......lua函数多个返回值如果上面是function返回了3个返回值,那么return a ,b,c 中 a=3 b=2 c=1 第一个返回值先入栈
复制代码栈pop问题:lua_pop(x) ;x 为 pop的个数 ,一般调用函数后 pop(1) 因为一般返回值只有一个 ps:调用函数的时候 不会堆栈平衡,返回时已经平衡了,值需要对返回的值 占用的栈清理
c++使用lua的数据 例子 - extern "C"{
- #include "src/lualib.h"
- #include "src/lauxlib.h"
- #include "src/lua.h"
- }
- #include "iostream"
- using namespace std;
- lua_State*l;
- int get_sum(int x, int y)
- {
- int sum=0;
- lua_getglobal(l, "get_sum");/*调用函数*/
- lua_pushnumber(l, x);
- lua_pushnumber(l, y);
-
- lua_call(l, 2, 3);/*参数2个,返回值3个*/
- cout << "top is " << lua_gettop(l) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 0) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 1) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 2) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 2) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 3) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 4) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 5) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 6) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 7) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 8) << endl;
- cout << lua_tonumber(l, lua_gettop(l) - 9) << endl;
- lua_pop(l, 3);/*function返回了3个值*/
- cout << "\n\n" << endl;
- lua_getglobal(l, "b");/*获取变量 压入栈中*/
- cout <<"b=" <<lua_tonumber(l, lua_gettop(l)/*1*/ ) << endl;
- lua_getglobal(l, "a");/*获取变量 压入栈中*/
- cout << "a=" << lua_tonumber(l, lua_gettop(l)/*1*/) << endl;
- lua_getglobal(l, "c");/*获取变量 压入栈中*/
- cout << "c=" << lua_tonumber(l, lua_gettop(l)/*1*/) << endl;
- lua_pop(l, 3);/*清除栈*/
- cout << "top is" << lua_gettop(l) << endl;
- return sum;
- }
- int main()
- {
- l = lua_open();
- luaL_openlibs(l);
- luaL_dofile(l, "a.lua");
- //cout << get_sum(1, 2) << endl;
- get_sum(1, 2);
- lua_close(l);
- system("pause");
- return 0;
- }
复制代码a=10; b=11; c=12;
function get_sum(arg_1,arg_2) return arg_1+arg_2,"100","200"; end
|