码迷,mamicode.com
首页 > 编程语言 > 详细

(Lua) C++ 呼叫 Lua 的變數、函式

时间:2019-01-08 23:38:11      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:call   ret   wget   variable   stat   integer   ...   har   div   

簡單的在C++裡頭與Lua交互操作

首先提供 Lua 的簡單範例

 1 print(" Lua 2019/01/07 !!!")
 2 
 3 -- Variable
 4 monster_type = "Ghost"
 5 blood = 99.9
 6 
 7 -- Table
 8 x_table = {10, 20, 30}
 9 
10 -- Function
11 function f(var)
12     return var * var + 2 * var + 100
13 end

呼叫變數的辦法

 1 int main(int argc, const char *argv[])
 2 {
 3     string scriptnema = "main.lua";
 4     int luaError;
 5     lua_State *L = luaL_newstate();
 6 
 7     if (L == NULL)
 8     {
 9         cout << "luaL_newstate faile !!!" << endl;
10         return -1;
11     }
12 
13     luaL_openlibs(L);
14     // first getbloable parameter that it will be first on the stack.
15     // stack index number will follow small to large [1 ... 5] or [-5 ... -1]
16     lua_getglobal(L, "blood");
17     lua_getglobal(L, "monster_type"); 
18     
19     double blood = lua_tonumber(L, 1); // index = 1 or -2
20     string type = lua_tostring(L, 2);  // index = -1 or 2
21 
22     cout << "blood = " << blood << endl;
23     cout << "monster_typa = " << type.c_str() << endl;
24 
25 }

呼教 table的方式

 1 int main(int argc, const char *argv[])
 2 {
 3     //cout << "lua test platform!!!" << endl;
 4     string scriptnema = "main.lua";
 5     int luaError;
 6     lua_State *L = luaL_newstate();
 7 
 8     if (L == NULL)
 9     {
10         cout << "luaL_newstate faile !!!" << endl;
11         return -1;
12     }
13 
14     luaL_openlibs(L);
15     luaL_dofile(L, scriptnema.c_str());
16 
17     lua_getglobal(L, "x_table");
18     lua_Integer array_len = luaL_len(L, -1);
19     cout << "array_len = " << array_len << endl;
20 
21     for (int i = 3; i > 0; i--){
22         lua_rawgeti(L, -1, i); // lua_rawgeti(lua stack, index, value)
23         cout << lua_tonumber(L, -1) << endl;
24         lua_pop(L, 1);
25     }
26 }

在 C++ 輸入變數給 Lua 且 return 結果

 1 int luaf(lua_State *L){
 2     double sum;
 3     lua_getglobal(L, "f");
 4 
 5     lua_pushnumber(L, 20);
 6 
 7     lua_call(L, 1, 1); // lua_call(lua stack, input num, output num)
 8 
 9     sum = (int)lua_tonumber(L, 1);
10 
11     lua_pop(L, 1);
12 
13     return sum;
14 }
15 
16 int main(int argc, const char *argv[])
17 {
18     //cout << "lua test platform!!!" << endl;
19     string scriptnema = "main.lua";
20     int luaError;
21     lua_State *L = luaL_newstate();
22 
23     if (L == NULL)
24     {
25         cout << "luaL_newstate faile !!!" << endl;
26         return -1;
27     }
28 
29     luaL_openlibs(L);
30     luaL_dofile(L, scriptnema.c_str());
31 
32     cout << luaf(L) << endl;
33     lua_close(L);
34     system("pause");
35 }

以上是 Lua --> Stack 基本API應用,希望最後是把所有的API都玩過一遍。

這樣之後學習與應用時可以更加靈活

 

(Lua) C++ 呼叫 Lua 的變數、函式

标签:call   ret   wget   variable   stat   integer   ...   har   div   

原文地址:https://www.cnblogs.com/ollie-lin/p/10241913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!