美文网首页Lua
c++获取lua变量以及调用lua函数

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

作者: Half8Man | 来源:发表于2019-03-01 13:52 被阅读6次

    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

    相关文章

      网友评论

        本文标题:c++获取lua变量以及调用lua函数

        本文链接:https://www.haomeiwen.com/subject/kddduqtx.html