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;
}