main.cpp代码
#include <iostream>
#include <string>
extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
// 从lua获取nil变量
void getNilVarFromLua(lua_State* L)
{
if (L)
{
lua_getglobal(L, "varNil");
if (lua_isnil(L, -1))
{
std::cout << "the first var is nil" << std::endl;
}
}
}
// 从lua获取boolean变量
void getBooLVarFromLua(lua_State* L)
{
if (L)
{
lua_getglobal(L, "varBool");
if (lua_isboolean(L, -1))
{
auto varBool = lua_toboolean(L, -1);
std::cout << varBool << std::endl;
}
}
}
// 从lua获取number变量
void getNumberVarFromLua(lua_State* L)
{
if (L)
{
lua_getglobal(L, "varNumber");
if (lua_isnumber(L, -1))
{
auto varNumber = lua_tonumber(L, -1);
std::cout << varNumber << std::endl;
}
}
}
// 从lua获取string变量
void getStringVarFromLuaFile(lua_State* L)
{
if (L)
{
lua_getglobal(L, "varString");
if (lua_isstring(L, -1))
{
auto varString = lua_tostring(L, -1);
std::cout << varString << std::endl;
}
}
}
// 从lua获取table变量
void getTableVarFromLua(lua_State* L)
{
if (L)
{
lua_getglobal(L, "varTable");
lua_pushstring(L, "content");
lua_gettable(L, -2);
auto content = lua_tostring(L, -1);
std::cout << content << std::endl;
}
}
// 调用lua函数
void callFuncFromLua(lua_State* L)
{
if (L)
{
lua_getglobal(L, "add");
if (lua_isfunction(L, -1))
{
lua_pushinteger(L, 100);
lua_pushinteger(L, 200);
lua_call(L, 2, 1);
auto sum = lua_tointeger(L, -1);
std::cout << sum << std::endl;
}
}
}
int main()
{
lua_State* L = luaL_newstate();
if (L)
{
luaopen_base(L);
auto error = luaL_dofile(L, "main.lua");
if (not error)
{
getNilVarFromLua(L);
getBooLVarFromLua(L);
getNumberVarFromLua(L);
getStringVarFromLuaFile(L);
getTableVarFromLua(L);
callFuncFromLua(L);
}
lua_close(L);
}
return 0;
}
main.lua代码
-- nil
varNil = nil
-- boolean
varBool = true
-- number
varNumber = 100
-- string
varString = "巴啦啦能量"
-- table
varTable = {
content = "让我来朵蜜你吧"
}
-- function
function add( num1, num2 )
return num1 + num2
end
运行结果
the first var is nil
1
100
巴啦啦能量
让我来朵蜜你吧
300
网友评论