作者:朱金灿
来源:http://blog.youkuaiyun.com/clever101/
Lua的发明实在是C++程序员的福音。它的语法简单、灵活和扩展性强,同时它和C++的紧密结合。综合这些优点使得Lua深受C++程序员特别是C++游戏开发人员的欢迎。我记得在去年的语言排行榜上它排在20位,我估计它还会上升。
但是直接使用Lua解释库的API函数发现并不好用,去年我写了一篇:VC和LUA混合开发之VC程序调用Lua脚本函数 。当时有大侠建议我直接使用LuaPlus。今日一试,感觉确实比直接使用Lua的API函数方便。
下面开始介绍一下我的使用经历。首先下载LuaPlus源码来编译。LuaPlus的官网下载地址是:http://luaplus.org/projects/luaplus/wiki 。但是我上去下载时其源码下载链接已经失效。我从别处下载一份(版本不明,使用VS C++ 2005编译),同时加上一些教程上传到优快云和PUDN,下载链接如下:
使用VS C++ 2005将源码编译成静态库略过不提。开始正式测试Lua脚本。首先使用VS2005建一个TestLuaPlus的控制台工程,在工程的输出路径下写一个简单的lua脚本:
test.lua。里面只有一行代码:
health = 200;
意思为生命值等于200。
然后在TestLuaPlus工程的TestLuaPlus.cpp敲入如下代码:
#include <stdlib.h> #include <string> using std::string; #include <iostream> using std::cout; #include "boost/algorithm/string.hpp" #include "boost/filesystem/path.hpp" #include "boost/filesystem/operations.hpp" #include "boost/format.hpp" // 需要包含LuaPlus.h及声明使用其命名空间 #include "../LuaPlus/LuaPlus.h" using namespace LuaPlus; int main(int argc, _TCHAR* argv[]) { // 获取应用程序的输出路径,不明白的见本博客的:使用boost库获取应用程序的所在目录 string fullpath = boost::filesystem::initial_path<boost::filesystem::path>().string(); // 加上lua文件名,组成全路径。当然也可以把lua的绝对路径赋给LusFilePath string LusFilePath = fullpath + string(_T("//test.lua")); LuaStateOwner state; // 执行Lua脚本,返回值表示执行成功 int iret = state->DoFile(LusFilePath.c_str()); if (0!=iret) { return 1; } // 获取生命值 int nMyHealth = state->GetGlobal("health").GetInteger(); cout<<_T("玩家的生命值还有")<<nMyHealth<<std::endl; system(_T("PAUSE")); return 0; }