LuaPlus上手指南[转]

http://www.cppblog.com/singohgod/archive/2007/04/16/22069.html

LuaPlus上手指南(1)

 

 

版权所有,转载请注明出处,勿用于商业用途,谢谢!

笔者:    大宝天天见

Blog:    http://www.cppblog.com/singohgod

本人水平有限,有错请指出,欢迎交流,共同进步!

 

 

国内关于Lua的资料实在是最为少,为了找寻一个相当的Lua的C++封装,真是如同大海捞针.在拘留了成千上万材料后锁定以下几栽:LuaBind
ToLua++
LuaPlus.在增选上大有嘲讽的意味,LuaBind的本子号还尚未到1.0,加上网友十分有微词,放弃.ToLua++本来有意中人推荐,但是怎么都摸不顶下载,官网就是从不起来,无赖放弃.就只有LuaPlus了,看到有些人口之评头品足还行,于是决定便因故它们吧.

LuaPlus的材料便又少了,连怎么布局怎么调试等啊都无,只有沐枫大哥讲解了语法方面的一律首文章.啊哟,怎么搞呢,难道还要光发生血性在头皮上了?(某伟人曾说了,但凡杰出之转业都是坚强在头皮干出来滴)

好了,言归正传,下面说出口自己的涉吧:

 

什么样编译

  1. 1.       下载

首先到官方网站下载: http://www.luaplus.org/

下载者: All source code: http://luaplus.org/LuaPlus51\_Build1100.zip
(我手上的版,当然更是新更好)

 

  1. 2.       剥离

解开下充斥包,打开 \LuaPlus51_Build1100\Src\LuaPlus
里面是任何起源文件,src下是lua的源文件.这里出个叫人疑惑的地方,源文件中带了片无欲之公文,要抹去,基本上要以下这些文件:

1)      Lua库文件:

 

lapi.c

lapi.h

lauxlib.c

lauxlib.h

lbaselib.c

lcode.c

lcode.h

ldblib.c

ldebug.c

ldebug.h

ldo.c

ldo.h

ldump.c

lfunc.c

lfunc.h

lgc.c

lgc.h

linit.c

liolib.c

llex.c

llex.h

llimits.h

lmathlib.c

lmem.c

lmem.h

loadlib.c

lobject.c

lobject.h

lopcodes.c

lopcodes.h

loslib.c

lparser.c

lparser.h

lstate.c

lstate.h

lstring.c

lstring.h

lstrlib.c

ltable.c

ltable.h

ltablib.c

ltm.c

ltm.h

lua.h

luaconf.h

lualib.h

lundump.c

lundump.h

lvm.c

lvm.h

lzio.c

lzio.h

print.c

 

2)      LuaPlus头文件:

 

auxiliar.h

LuaAutoBlock.h

LuaCall.h

LuaFunction.h

LuaHelper.h

LuaHelper_Object.h

LuaHelper_StackObject.h

LuaLink.h

LuaObject.h

LuaObject.inl

LuaPlus.h

LuaPlusCD.h

LuaPlusFunctions.h

LuaPlusInternal.h

LuaStackObject.h

LuaStackObject.inl

LuaStackTableIterator.h

LuaState.h

LuaState.inl

LuaStateOutFile.h

LuaTableIterator.h

luathread.h

pt.h

srm.h

 

3)      LuaPlus源文件

 

LuaCall.cpp

LuaObject.cpp

LuaPlus.cpp

LuaPlusAddons.c

LuaPlusFunctions.cpp

LuaPlus_Libs.cpp

LuaStackObject.cpp

LuaStackTableIterator.cpp

LuaState.cpp

LuaStateOutFile.cpp

LuaState_DumpObject.cpp

LuaTableIterator.cpp

lwstrlib.c

 

 

  1. 3.       立项目

下一场您尽管可以以VS中成立一个新路,静态链接库的:

 

独家把用之公文加进去,之后编译,应该能够经过了.

 

怎么下

接着讲说如何在你的别样种类遭到行使LuaPlus.

1.必要的安排

若的花色或是这样的:

 

设置GameClient的依赖项是LuaPlusLib

#include “LuaPlus.h”

using namespace LuaPlus;

记忆干这事…

 

2.创立一个状态

LuaStateOwner state;

事后之操作都绕这个state

 

3.实践脚本

int iret = state->DoFile(“test.lua”);

返回值为0表示成功,否则不化功.

 

4.C++吃取得Lua脚本的变量

使你的test.lua中出:

health = 200;

经过下列方式就是得当C++中收获此数值

int mytest = state->GetGlobal(“health”).GetInteger();

 

5.C++受调用Lua脚本里的函数

如若你的test.lua中起:

function Add(x, y)

       return x+y;

end

当C++中得先声明是函数:

LuaFunction<float> Add =  state->GetGlobal(“Add”);

如此你尽管闹矣Add()这个函数,然后便得像平常一样以她了:

float myret = Add(3.14f,5.25f);

 

6.Lua脚本中调用C++函数

于读取test.lua之前若先行将C++函数注册到Lua的运作时栈里,这样在执行lua脚本的时候,才了解执行哪一个函数:

第一发出函数:

int LS_PrintNumber(LuaState* state)

{

LuaStack args(state);

 

       if (args[1].IsNumber()) {

              printf(“%f\n”, args[1].GetNumber());

       }

       return 0;

}

接下来报之函数到Lua:

state->GetGlobals().Register(“PrintNumber”, LS_PrintNumber);

如此即使将LS_PrintNumber映射为Lua中得以下的函数PrintNumber.

Test.lua脚本中补充加调用言语:

PrintNumber(30);

当state->DoFile(“test.lua”);执行之时节,就尽了C++中的之函数.

 

总结

正文介绍了LuaPlus的为主配置方式和运,希望对您发出帮助.下一样首用介绍一些尖端特性,如怎样在VS中调试LuaPlus的台本,以及对类的操作等.

万一还有另外疑问可看下面这大概的例证:
 /Files/singohgod/LuaPlus_Test.rar