美文网首页
lua调用c++中的函数(使用LuaBridge)

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

作者: 左脚迈太快 | 来源:发表于2019-11-15 10:51 被阅读0次

前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程项目
LuaBridge源码下载,在工程项目文件夹下新建LuaBridge文件夹来存放下载下来的LuaBridge源码,整个目录结构如下,把LuaBridge源码压缩包中的Source/LuaBridge文件夹解压到新建的LuaBridge文件夹下(PS:新建LuaBridge文件夹的目的是为了方便知道当前引用的第三方的库或者源码是什么)

目录结构
有了源码我们就可以在工程中进行引用了,修改我们的工程项目属性增加需要引用的LuaBridge,属性修改如下图
增加LuaBridge的引用
修改我们的c++代码,增加在lua中调用的函数并使用LuaBridge进行注册
#include <iostream>

using namespace std;

extern "C"
{
#include "lua.h"  
#include "lauxlib.h"  
#include "lualib.h"  
}
#include "LuaBridge/LuaBridge.h"
using namespace luabridge;
//新增的供lua中调用的c++函数
int cppAddFun(int a, int b)
{
    cout << a << " " << b << endl;
    return a + b;
}

int main(int argc, char* argv[])
{
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    //使用LuaBridge进行函数的注册导出,这样在lua脚本中就可以调用了,其他的使用方法参考LuaBridge手册
    luabridge::getGlobalNamespace(L).addFunction("cppFun", cppAddFun);
    
    auto i_ret = luaL_loadfile(L, "test.lua");
    if (i_ret)
    {
        cout << "load file error" << endl;
        return i_ret;
    }
    i_ret = lua_pcall(L, 0, 0, 0);
    if (i_ret)
    {
        cout << "pcall error" << endl;
        return i_ret;
    }
    lua_getglobal(L, "add");
    lua_pushnumber(L, 10);
    lua_pushnumber(L, 20);
    i_ret = lua_pcall(L, 2, 1, 0);
    if (i_ret)
    {
        const char *pErrorMsg = lua_tostring(L, -1);
        cout << pErrorMsg << endl;
        lua_close(L);
        return i_ret;
    }
    const int num = static_cast<int>(lua_tonumber(L, -1));
    cout << num << endl;

    return 0;
}

修改我们的lua脚本test.lua

function add(a,b)
    return a + b
end
local sum = cppFun(1, 2)
print(sum)

一切就绪,开始Ctrl+F5,编译运行吧,结果如下图


运行结果

这里先运行了脚本里调用的c++里的函数,然后在c++里执行了lua中的add函数

相关文章

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

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

  • c++ ffi

    我的服务器引擎使用c++/lua。 希望利用到luajit的高效,同时去掉c++绑定(luabridge)。因此我...

  • 三、Lua调用C++函数

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

  • C++调用lua方式

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

  • Lua绑定流程

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

  • c++调用lua中的函数

    为了方便介绍c++和lua的交互,先整一个基本的示例程序,确保环境可以正常运行 从lua的官网下载lua的源码,下...

  • Lua中的CAPI概述

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

  • DLL调用

    使用VS2012生成DLL文件(1)在C++中调用DLL中的函数(2)在C++中调用DLL中的函数(3)在VS20...

  • lua函数调用

    Lua 中的函数调用的语法如下: functioncall ::= prefixexp args 函数调用时,第一...

  • Cocos2dx Lua 绑定

    所谓lua绑定就是说在lua中可以调用c++的类或者函数,整个过程细分为九步 1.下载配置环境2.编写定义的c++...

网友评论

      本文标题:lua调用c++中的函数(使用LuaBridge)

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