前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程项目
LuaBridge源码下载,在工程项目文件夹下新建LuaBridge文件夹来存放下载下来的LuaBridge源码,整个目录结构如下,把LuaBridge源码压缩包中的Source/LuaBridge文件夹解压到新建的LuaBridge文件夹下(PS:新建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函数
网友评论