欢迎来到天天文库
浏览记录
ID:46709754
大小:96.24 KB
页数:5页
时间:2019-11-27
《如何在C++中集成Lua脚本(LuaPlus篇)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、如何在C++中集成Lua脚本(LuaPlus篇)学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。去年我作了一个Lua脚本的C++包装,有许多朋友感兴趣,并尝试使用,我感到受宠若惊。事实上,我作的包装,学习的目的比较强,它还是有许多缺陷的。为了让朋友们少走弯路,我推荐使用LuaPlus作为C++的包装。LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。LuaPlus目前版本为:LuaPlusforLua5.01Distribution
2、Build1080(February28,2004)。大家可以到站点下载:我将在下面说明,如何使用LuaPlus,以及如何更方便的让LuaPlus与C++的类合作无间。1.调用Lua脚本//创建Lua解释器:LuaStateOwnerstate;//执行Lua脚本:state->DoString("print('HelloWorld')");//载入Lua脚本文件并执行:state->DoFile("C:\test.lua");//载入编译后的Lua脚本文件并执行:state->DoFile("C:\test.luac");2.与Lua脚本互相调用/
3、/为Lua脚本设置变量state->GetGlobals().SetNumber("myvalue",123456);//获得Lua变量的值intmyvalue=state->GetGlobal("myvalue").GetInteger();//调用Lua函数LuaFunctionluaPrint=state->GetGlobal("print");luaPrint("HelloWorld");//让Lua调用C语言函数intadd(inta,intb){returna+b;}state->GetGlobals().RegisterDirec
4、t("add",add);state->DoString("print(add(3,4))");//让Lua调用C++类成员函数classTest{public:intadd(inta,intb){returna+b;}};Testtest;state->GetGlobals().RegisterDirect("add",test,add);state->DoString("print(add(3,4))");3.在Lua脚本中使用C++类这个稍微有点小麻烦。不过,我包装了一个LuaPlusHelper.h的文件,它可以很轻松的完成这个工作。它的实现也很简单
5、,大家可以从源码上来获得如何用纯LuaPlus实现同样的功能。不过,这里仍然有一个限制没有解决:不能使用虚成员函数。不过考虑到我们仅是在Lua调用一下C++函数,并不是要将C++完美的导入到Lua,这个限制完全可以接受。另外,类成员变量不能直接在Lua中访问,可以通过类成员函数来访问(比如SetValue/GetValue之类)。//下面是一个简单的C++类:classLogger{public:voidLOGMEMBER(constchar*message){printf("Inmemberfunction:%s",message);}Logger()
6、{printf("Constructing(%p)...",this);v=10;}virtual~Logger(){printf("Destructing(%p)...",this);}Logger(intn){printf("--Constructing[%d](%p)...",n,this);}Logger(Logger*logger){printf("--Constructing[%p](%p)...",logger,this);logger->LOGMEMBER("CallFromConstructor");}intSetVal
7、ue(intval){v=val;}intGetValue(){returnv;}public:intv;};//导入到Lua脚本:LuaClass(state).create("Logger")//定义构造函数Logger::Logger().create("Logger2")//定义构造函数Logger::Logger(int).create("Logger3")//定义构造函数Logger::Logger(Logger*).destroy("Free")//定义析构函数Logger::~Logger().de
8、stroy("__gc")//定义析构函数Logge
此文档下载收益归作者所有