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

前面一节简述描写了如何在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函数

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

推荐阅读更多精彩内容