c++调用lua中的函数
2019-11-14 本文已影响0人
左脚迈太快
为了方便介绍c++和lua的交互,先整一个基本的示例程序,确保环境可以正常运行
从lua的官网下载lua的源码,下载地址:点击下载lua源码, 用vs创建一个win32控制台项目命名为Cpp_Lua,创建好之后再创建一个空项目命名为lua用来编译刚下载好的lua源码(PS:编译成静态库方便我们使用),真个项目大概的样子
image把下载好的lua源码src文件夹解压到上面创建好的Lua工程项下,目录结构是这个样子的
image image修改Lua工程项的项目属性,修改输出目录和配置类型
image修改好之后就可以直接编译lua工程项了,我用的debug模式,方便调试学习,生成好之后就会在项目文件夹下(LuaLib/Debug/)看到生成的lua静态库Lua.lib
下面开始编写代码测试生成的lua库,在Cpp_Lua项目中添加文件Cpp_Lua.cpp
#include <iostream>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
int main(int argc, char* argv[])
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
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;
}
修改Cpp_Lua工程项目的属性,因为我们要用到lua库,这里主要就是配置lua库的头文件和相应的lib文件的位置
引用的lua头文件路径
引用的上面我们生成的lua.lib路径
修改完成之后我们就可以直接F7进行编译了,如果想要运行,我们还需要准备调用的lua文件
最终目录结构
新建test.lua,文件位置如上图
function add(a,b)
return a + b
end
一切准备好之后就可以Ctrl+F5运行了,运行结果如下
运行结果
如果想要更好的c++和lua的交互我们选择使用开源库LuaBridge,下一篇文件举例如何使用