Lua学习笔记(1) : 第一个Lua程序 - Lua与C++混合编程

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释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值