1. Lua简介
Lua是一个轻量化的脚本语言,体积小,速度快。
Lua须嵌入在其他宿主语言(如:C、C++)中来执行,因此功能也很容易灵活扩充。
Lua是个动态型别语言,这表示不需要对变量宣告类型,而每个值都有自己所代表的类型。
Lua常见用于游戏开发与嵌入式开发,例如编写游戏AI、剧情脚本,把程序模块化。
使用Lua编写程序中可模块化之部分的好处是,一旦模块内容有所变更,无需重编译主程序就可直接使用新版本的模块。
2. Lua环境配置
在想使用Lua优化我们的软件开发过程之前,我们需要对开发环境做一些配置,
本教程中使用Visual Studio 2010建置C++程序,在需要嵌入Lua脚本语言时需要引用Lua的library。
1 生成Lua library
首先到Lua官方下载页面下载Lua library的源代码 http://www.lua.org/download.html
本教程中使用的版本是Lua 5.3.1 http://www.lua.org/ftp/lua-5.3.1.tar.gz
下载好之后用VS新建一个静态库工程,选项中不勾选"先行编译头文件(Pre-Compiled Header)"和"MFC"。
将刚才下载的压缩包内之src目录中的所有文件,除了lua.c和Makefile外,全导入到静态库工程中。
接下来对静态库工程属性进行配置,
进入工作列选单中的"属性" -> "c/c++" -> "高级" -> "编译为",点击下拉选单选择"编译为C++代码(/TP)"
如此就可以在其他程序使用此lib时,直接从C++中调用C的头文件,否则,在C++程序中需要以加入extern "C" 的方式宣告具有C连结来载入C的头文件,表示将头文件以C的规范编译。
最后就可以建置工程,生成lib。
2 配置主程序之工程属性
新建一个实现Lua的工程。
在工程目录下建立include目录,把Lua库的几个头文件复制到include目录底下:
lua.h
lauxlib.h
lualib.h
luaconf.h
接着对此工程属性作配置,到"属性" -> "连结器" -> "输入" -> "其他相依性" 加入刚刚生成的lib。
"忽略特定的预设程式库"中可选择性的加入LIBCMT.lib 和MSVCRT.lib。
3. 编写代码
现在我们可以开始编写嵌入Lua的程序了,以下给出了一个简单的Hello World示例。
#include "include\lua.h"
#include "include\lauxlib.h"
#include "include\lualib.h"
#include "windows.h"
void main(int argc, char* argv[])
{
lua_State *pLua = luaL_newstate(); // Lua5.2后的版本遗弃lua_open(),改用luaL_newstate()
if(!pLua)
{
printf("Failed to open Lua\n");
return;
}
luaL_openlibs(pLua); // Lua5.1以上使用此函数开启库
const char *buf="print('Hello World!')";
luaL_dostring(pLua, buf); // 低於Lua5.1使用lua_dostring(buf);
lua_close(pLua);
system("pause");
return;
}
输出将会是 Hello World!
程序一开始,透过luaL_newstate()获得一个lua_State型别的handle,之后有关Lua的操作都透过这个handle执行。
接著,使用luaL_openlibs载入Lua的标准库。
然后使用luaL_dostring让Lua可以执行一段字串,第一个参数就是Lua的handle,第二个参数就是要执行的Lua代码内容。
最后,当要结束Lua操作时使用lua_close释放资源。