c++获取lua变量以及调用lua函数

main.cpp代码

#include 
#include 

extern "C"
{
#include 
#include 
#include 
}

// 从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

你可能感兴趣的:(c++获取lua变量以及调用lua函数)