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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容