美文网首页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函数

    main.cpp代码 main.lua代码 运行结果 the first var is nil1100巴啦啦能量让...

  • Lua中的CAPI概述

    头文件lua.h: Lua提供的基础函数,包括创建Lua环境,调用Lua函数,读写Lua环境中的全局变量,以及注册...

  • tolua调用c#函数及变量

    比如说你要调用一个lua函数 但你想把自身传给lua函数让这个函数调用c# 类的其他函数以及变量 首先是调用lua...

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

  • Lua绑定流程

    绑定是为了实现将C++代码注册到lua环境,使得lua可以调用C++函数。https://blog.csdn.ne...

  • 三、Lua调用C++函数

    上一篇文章中我们已经知道了,C++怎么调用Lua中的函数,接下来我们学习一下,Lua怎么调用C++中的函数。 这篇...

  • lua调用c++中的函数(使用LuaBridge)

    前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程...

  • Lua_API lua_call & lua_callk

    开篇 今天来简单了解一下 Lua 的函数调用:lua_call。 解析 函数调用协议 void lua_call ...

  • 四、C++获得Lua的变量和Table的值

    上两篇文章都已经把Lua和C++函数的调用讲完了,这篇开始讲变量和Table的调用。 这篇文章主要是讲C++怎么调...

网友评论

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

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