先从官网下载lua的源码,我下载的是这个,http://www.lua.org/ftp/lua-5.2.2.tar.gz。
在VS中创建新的项目,将下载的源码加入,并编译成lib,如下图
新建一个工程,将编译出来的lua.lib包含进来,就可以开始用了
1、C++ 调用 Lua
编写代码如下:
#include <iostream>
using namespace std;
#pragma comment(lib, "lua.lib")
extern "C"
{
#include "../lua/lua/lua.h"
#include "../lua/lua/lualib.h"
#include "../lua/lua/lauxlib.h"
}
void main()
{
lua_State* L = luaL_newstate(); // 请求一个lua虚拟机
if (!L)
{
cerr << "new state" << endl;
return ;
}
int nRet = luaL_loadfile(L, "luatest.lua"); // 加载测试文件
if (nRet != 0)
{
cerr << "load file luatest.lua" << endl;
return ;
}
lua_pcall(L, 0, LUA_MULTRET, 0); // 初始化函数调用
// 开始调用lua函数
lua_getglobal(L, "luafun"); // 在全局表中查找luafun函数
lua_pushinteger(L, 5); // 传一个参数5
nRet = lua_pcall(L, 1, 1, 0); // 告诉lua我要传一个参数给他(第一个1),他要回一个结果给我(第二个1)
if (nRet != 0)
{
cerr << "call luafun fail" << endl;
return ;
}
int nValue = lua_tointeger(L, -1); // 获取返回参数
cout << nValue << endl;
}
在luatest.lua中,我们的代码是这样的
function luafun(n)
return n * n
end
这个程序最终会输出25
2、Lua调用C++
#include <iostream>
using namespace std;
#pragma comment(lib, "lua.lib")
extern "C"
{
#include "../lua/lua/lua.h"
#include "../lua/lua/lualib.h"
#include "../lua/lua/lauxlib.h"
}
int CppFun(lua_State* L)
{
const char* pstr = lua_tostring(L, 1); // 获取传进来的参数
cout << pstr << endl;
return 0;
}
void main()
{
lua_State* L = luaL_newstate(); // 请求一个lua虚拟机
if (!L)
{
cerr << "new state" << endl;
return ;
}
int nRet = luaL_loadfile(L, "luatest.lua"); // 加载测试文件
if (nRet != 0)
{
cerr << "load file luatest.lua" << endl;
return ;
}
lua_pcall(L, 0, LUA_MULTRET, 0); // 初始化函数调用
lua_register(L, "cppFun", &CppFun); // 注册一个lua可以调用的C++函数
// 开始调用lua函数
lua_getglobal(L, "luafun"); // 在全局表中查找luafun函数
lua_pcall(L, 0, 0, 0);
}
在lua中我们的代码是这样的
function luafun()
cppFun("lua call cpp") // 调用注册过的C++函数
end
这个程序最后会输出lua call cpp
好了,写完了,有疑问的童鞋留言哈