1. 下载lua:www.lua.org,下载源码解压
2. 编译:通过“开始-程序”打开VS命令行,进入etc目录的上级目录,运行etc/luavs.bat,编译后的文件位于src目录,有用的文件有lua51.dll, lua51.lib, lua.h, lualib.h, luaxlib.h, luaconf.h
{
生成静态lua库的方法:
1.那建立一个空的vc静态库工程
2.把lua源码src目录下的所有.c和.h文件(除了lua.c和luac.c)添加进来
3.编译生成lib
}
3. 以MFC调用LUA为例,建立对话框工程,并包含头文件
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
并声明lua环境指针:
lua_State *lua;
4. 初始化,打开一些必要的库(可放入InitDialog)
lua = lua_open ();
if(lua)
{
luaopen_base (lua);
luaopen_table (lua);
luaopen_string (lua);
luaopen_math (lua);
luaopen_debug (lua);
}
5. 建立文本文件test.lua:
function add ( x, y )
return x + y;
end
6. 执行lua脚本的代码:
luaL_dofile(lua, "test.lua"); // 解释分析lua文件
lua_getglobal(lua, "add"); // 取到一个全局标号add,取的同时会把add函数压栈
lua_pushnumber(lua, 10); // 把第一个参数压入栈里
lua_pushnumber(lua, 2); // 第二个参数压栈
if(lua_pcall(lua, 2, 1, 0) != 0) // 执行add函数
{
AfxMessageBox("lua_pcall error!");
return;
}
int d = (int)lua_tonumber(lua, -1); // 函数执行完了,执行结果被压栈,所以取得最顶端的一个数就是结果值,-1就是指取栈顶的值
CString str;
str.Format("%d", d);
AfxMessageBox(str);
lua_pop(lua, 1); // 把值从栈里清除,pop(弹出)一个值