编译分三步:
1:编译静态库打开vs2005-文件-新建-项目-vc++项目-windows控制台项目,输入名称(我这里输入lualib),单击确定,在左边选择应用程序设置,然后在右边选择静态库,单击完成,把源文件和头文件里的文件全部删掉,右键源文件-添加-添加现有项,把src中除了lua.c、lua.h、luac.c以为的文件全部选上打开 编译后生成了一个Lualib.lib文件
2:编译lua解释器
打开vs2005-文件-新建-项目-vc++项目-windows控制台项目,输入名称(我这里输入lua),单击完成。把源文件和头文件里的文件全部删掉,右键源文件-添加-添加现有项,把src中lua.c、lua.h打开,右键lua-项目依赖,选择lua取决于lualib,确定编译后生成lua.exe。
3:编译luac编译器
打开vs2005-文件-新建-项目-vc++项目-windows控制台项目,输入名称(我这里输入luac),单击完成。把源文件和头文件里的文件全部删掉,右键源文件-添加-添加现有项,把src中luac.c 打开,右键luac-项目依赖,选择luac取决于lualib,确定编译后生成luac.exe。
现在写一个c++调用Lua例子。
打开vs2005-文件-新建-项目-vc++项目-windows控制台项目。添加文件test.cpp
#include <iostream>
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
using namespace std;
void MaxMin(lua_State* L, int x, int y)
{
lua_getglobal(L, "MaxMin");
//参数1
lua_pushnumber(L, x);
//参数2
lua_pushnumber(L, y);
//2个参数,3个返回值
lua_pcall(L, 2, 3, 0);
const char* c = lua_tostring(L, -3);
lua_Number n1 = lua_tonumber(L, -2);
lua_Number n2 = lua_tonumber(L, -1);
cout<<c<<" "<<"Max = "<<n1<<", Min = "<<n2<<endl;
//元素出栈
lua_pop(L, 3);
}
int main(int argc, char* argv[])
{
lua_State* L = luaL_newstate();
//必须使用绝对路径
if(!luaL_loadfile(L, "E:\\Docment\\VS2005\\Lua\\test\\test.lua"))
{
if(!lua_pcall(L, 0, 0, 0))
{
MaxMin(L, 1, 2);
MaxMin(L, 3, 3);
MaxMin(L, 9, 8);
}
}
lua_close(L);
return 0;
}
编写Lua脚本文件test.lua
function MaxMin(x, y)
if x > y then
return "x > y", x, y
elseif x == y then
return "x = y", x, y
else
return "y > x", y, x
end
end
对项目进行简单配置:添加附加包含目录、附加库目录,附加依赖项后编译运行:
y > x Max = 2, Min = 1
x = y Max = 3, Min = 3
x > y Max = 9, Min = 8