最近对lua比较感兴趣,工欲善其事必先利其器,方便下一步的学习。
一. 下面两张图比较形象描述了lua语言定位及交互方法:
(1) Lua可以让程序员开发在Lua脚本中调用C/C++函数的接口,这个接口称做LuaGlue函数,因为它们可以在Lua环境中整合C
/C++的功能。
(2) Lua API提供了函数让C++代码也可以直接调用Lua函数,还提供了方法可以传递字符和长文字给Lua解释。
综合上面两点所述,C/C++代码和Lua脚本之间的交互是双向的!
二. QT环境部署方法简介
使用tolua有以下步骤: 这里只讲工程建立,2~5参考前一篇log。
- 工程建立
- 编写c/c++文件.
- 编写.pkg文件,填写需要导出的c/c++接口.
- 使用tolua可执行程序将pkg接口导出成LuaVm可调用的栈交互c/c++文件.
- 将第三步生成的文件和其他c/c++文件一起编译生成最终的可执行程序.
------------------------------------------------------------------------------------------------------------------
1).下载http://www.lua.org/versions.html#5.3
2).下载tolua-5.2.4
Tulua官网http://webserver2.tecgraf.puc-rio.br/~celes/tolua/,更新到tolua-5.2.4,支持lua5.2.4。官网只提供了tolua的源代码,没有提供任何程序。
下载代码解压后,在src目录下有三个目录,如下:
Bin目录中包含了生成tolua++.exe转换程序的代码,我以使用VS2015编译,文章最后有下载地址。
Lib目录包含了程序使用tolua时需要包含的库的代码,因为代码比较少,我一般直接将lib文件夹中的代码直接包含到程序中。
3) QT工程编译
a.生成lua lib
b. tolualib生成
(1). lua5.3.5: 在项目中去除掉lua.c和luac.c文件.
(2). tolua在Bin目录下有两个.c文件,tolua.c、toluabind.c,将这两个文件加入到项目中,另外项目中还须要lua5.2.4代码和Lib目录下的代码.。如下:
(3). 生成tolua.exe
三.使用样例
lua调用
main.cpp
#include <iostream>
extern "C"
{
#include "lualib.h"
#include "lauxlib.h"
}
#include "mylib.h"
using namespace std;
int main(int argc, char *argv[])
{
int tolua_mylib_open(lua_State*);
lua_State* state = luaL_newstate();
luaL_openlibs(state);
tolua_mylib_open(state);
if (luaL_dofile(state, "scripts/testlua.lua") != 0)
{
cout << "excute lua file failed!" << endl;
lua_close(state);
return 1;
}
lua_close(state);
system("pause");
return 0;
}
tetstlua.lua
local test = Test:new(1, 2)
test:sayHello()
print("a = " .. test:getA())
print("a + b = " .. test:add())
使用tolua.EXE将上述lua脚本生成tolua.CPP,并加入到qt工程,运行结果如下: