• LuaPlus新手使用方法(转)


      看大家都在研究lua,也参与大潮中。。。折腾半天没折腾好,相当的无语时候,网上找的资料都是你抄写我,我抄袭他的。。

          郁闷,只要边抄袭边修改,最后测试成功,整理一个完整的资料发表下。再次感谢“雪明”与一个不知名的网友文章,不知道原作者,也就不发链接了。

    如何编译

    1.       下载

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

    下载这个: All source code: http://luaplus.org/LuaPlus51_Build1100.zip (我当前的版本,当然越新越好)

    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

          用vs2005打开LuaPlus.vs2005.vcproj默认加载以后,选择release模式编译。。会在http://www.cnblogs.com/lib/win32生成库lib文件LuaPlus_1100.lib与http://www.cnblogs.com/Bin目录生成LuaPlus_1100.dll.

         新建一个工程文件.来测试.将LuaPlus_1100.dll,LuaPlus_1100.lib拷贝到目录下。

    #include <stdio.h>

    --------------------------------------------------------------------------------------------------------------------------
    #include "F:\程序源码\visual C++ code\lua\LuaPlus51_Build1100\Src\LuaPlus\luaPlus.h"   //luaPlus头文件
    #pragma comment(lib,"LuaPlus_1100.lib")                                                                       //库文件
    using namespace LuaPlus;

    --------------------------------------------------------------------------------------------------------------------------

    void main()
    {
    LuaStateOwner state;

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

    int mytest = state->GetGlobal("health").GetInteger();
    LuaFunction <float> Add = state->GetGlobal("Add");
    float myRet = Add(3.14f,5.25f);

    getchar();
    }

    注意

    healtth = 100;

    function Add(int x,int y)
    return x + y;
    end

    这样是错误的,当有语法错误时候,会导致DoFile返回值为1.即返回错误。

    测试结果,有一个问题DoString("print('不显示???')");执行以后并没有打印。。

    测试成功以后,在D盘新建sdk\luaplus目录

    目录下新建include与lib文件夹,将luaplus/src目录下的文件拷贝到include目录,将lib库文件拷贝到lib目录。

    修改头文件包含信息,编译出来的文件需要打包带上LuaPlus_1100.dll文件。

    --------------------------------------------------------------------------------------------------------------------------

    #include <LuaPlus.h>
    #pragma comment(lib,"LuaPlus_1100.lib")
    using namespace LuaPlus;

    --------------------------------------------------------------------------------------------------------------------------

    下面发一下转载的用法:

    如何使用

    接着讲讲如何在你的其他项目中使用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++中的这个函数.


  • 相关阅读:
    get与post的区别
    shell脚本之变量替换
    Oracle sql性能优化
    HTTP协议报头
    Oracle查看表空间和删除表空间
    shell脚本之cat和wc命令
    java设计模式之单例模式
    Wireshark基本介绍和学习TCP三次握手转
    wrong number of arguments (1 for 2)
    PHP生成.url文件 网站常用的保存到桌面功能
  • 原文地址:https://www.cnblogs.com/lancidie/p/1903560.html
Copyright © 2020-2023  润新知