C语言中通过LUA API访问LUA脚本变量的简单例子
1.简介
这一节介绍一些关于栈操作、数据类型判断的lua api,可以使用这些函数获得脚本中的变量值。
2.步骤
编写 test01.lua 脚本,在vs2003中创建控制台c++程序并正确配置,执行查看结果,修改test02.lua脚本后查看执行结果
3.测试脚本
以下是用来测试的lua脚本
function plustwo(x)
local a = 2;
return x+a;
end;
rows = 6;
cols = plustwo(rows);
上面的脚本定义了一个函数、两个全局变量(lua脚本变量默认是全局的)。之后的c++程序中,我们将通过栈操作获得这两个变量 rows, cols。
4.控制台程序
#include <iostream>
extern "c"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
using namespace std;
int main(int argc, char* argv[])
{
cout << "01_read_stack" << endl;
/**//* create a lua vmachine */
lua_state *l = lua_open();
luaopen_base(l);
luaopen_table(l);
lual_openlibs(l);
luaopen_string(l);
luaopen_math(l);
int ierror;
ierror = lual_loadfile(l, "../test01.lua");
if (ierror)
{
cout << "load script failed!" << lua_tostring(l, -1)<< endl;
lua_close(l);
return 1;
}
ierror = lua_pcall(l, 0, 0, 0);
if (ierror)
{
cout << "pcall failed"<< lua_tostring(l, -1)<< ierror<< endl;
lua_close(l);
return 1;
}
lua_getglobal(l, "rows");
lua_getglobal(l, "cols");
if (!lua_isnumber(l, -2))
{
cout << "[rows] is not a number" << endl;
lua_close(l);
return 1;
}
if (!lua_isnumber(l, -1))
{
cout << "[cols] is not a number" << endl;
lua_close(l);
return 1;
}
cout << "[rows]"
<< static_cast<int> (lua_tonumber(l, -2))
<< "[cols]"
<< static_cast<int> (lua_tonumber(l, -1))
<< endl;
lua_pop(l,2);
lua_close(l);
return 0;
}