• lua_VC6环境


    1、

    下载得到 lua-5.1.4.tar.gz,解压得到 文件夹"lua-5.1.4"

    2、

    视频[02:00]

    将 lua-5.1.4/etc/luavs.bat 复制到 lua-5.1.4/ 下,然后才能够正常的编译,[02:08]双击执行lua-5.1.4/luavs.bat(ZC:我还是放到cmd下来运行吧,可以看到相关信息)

    ZC:编译生成的文件都是放在 lua-5.1.4/src中

    3、

    [02:53]编译OK之后,重要的是文件 lua-5.1.4/src/lua51.dll 和 lua-5.1.4/src/lua51.lib 。

    [03:02]需要的是整个 目录"lua-5.1.4/src"

    4、

    [06:55]要使用 lua的话,首先要创建一个解释器的指针,是一个全局变量

    [07:11]要用到这几个头文件:

      extern "C"

      {

        #include "lua.h"

        #include "lualib.h"

        #include "lauxlib.h"

      }

    [07:22]∵ 它是用标准的纯C写的,所以需要加一个“extern "C"”

    [07:47]需要用到 lua51.dll 和 lua51.lib

    [10:40]定义 lua解释器的全局变量指针"lua_State *L;"

      [10:47]还要进行初始化 [11:08]"L = lua_open();"

    5、

    [12:10]讲解 如何使用 lua解释器指针

    [12:47]它的返回类型 必须是整形(ZC: 这里的"它"指的是谁?应该是指下面的 定义的用于注册到lua解释器中去的C++函数)

      [13:00]参数类型必须是 lua_State*

      [13:20]返回的一般是 数量,∴我们一般返回的是 1  [31:05]说 return的值 是值 返回值的个数(ZC:但是他也不敢肯定)

      [14:15]int = lua_tointeger(lua_State*, 参数idx); // ZC: 参数idx 从1开始计数

      [15:07]函数必须是下面这样的样子:

        int 函数名(lua_State* _pLua) // 这里只包含一个参数

        {

          ... ...

          return 1;

        }

        这样的菜蔬才能注册到lua的解释器里面去

      [15:43]注册

        [16:22] luaL_register(lua_State*, "在脚本里面定义的函数的名称", 实际的在C++中定义的函数的指针);

          luaL_register(L, "F1F10", f1_f10);

       [17:36]还需要包含一个东西进工程(否则编译通不过)

        [18:16]lua的源码路径 ==> 加入到VC6-->Tools-->Options-->Dircttories--> "Show directories for:" 中的 "Include files"/"Executable files"/"Library files"/"Source files"  [19:25]ZC: 又把这里做的事情去掉了...

        [18:38]再次编译 还是不通过

        [19:07]ZC: 卧槽,居然是函数名写错了...应该是 lua_register(lua_State*, "在脚本里面定义的函数的名称", 实际的在C++中定义的函数的指针); (多了个"L")

    [20:45] luaL_dostring(lua_State*, "需要执行的字符串");

      luaL_dostring(L, "F1F10()"); // [21:00]这里的参数个数[F1F10()的参数个数] 它是不关心的。

      [21:06]字符串的大小写,一定要区分

    [22:42]EDIT 的设置:属性中"Want return"、"Multiline"要勾选

    [29:42]lua脚本不支持解释汉字

    [32:10] 获取脚本里面的 float/BOOL类型的参数的值

       [33:25] double = lua_tointeger(lua_State*, 参数idx); // double:双精度浮点数

      [34:00] BOOL = lua_toboolean(lua_State*, 参数idx); // ZC: 这里返回的是 BOOL还是bool?

      [39:27] 脚本里面的 布尔类型的参数,要写为 true/false,不能写为 1/0,写为 1/0的话 会解释出错误的结果

        ZC: 游戏还是报错退出了,那到底是不是 ∵ true/false,1/0 的问题呢?待测试...

      [41:00]选怪函数本身有问题,它被快速连续的调用两次的时候,游戏就报错退出了。脚本的编写 是没有问题的

         ZC: 选怪函数 只执行一次,照样游戏报错退出...

    6、

    我的VC6控制台 测试代码:

     1 #include <stdio.h>
     2 #include <windows.h>
     3 
     4 extern "C"
     5 {
     6     #include "???/lua-5.1.4/src/lua.h"
     7     #include "???/lua-5.1.4/src/lualib.h"
     8     #include "???/lua-5.1.4/src/lauxlib.h"
     9 }
    10 
    11 #pragma comment(lib, "lua51.lib")
    12 
    13 int Test(lua_State *_pLua)
    14 {
    15     int i = lua_tointeger(_pLua, 1);
    16     float f = lua_tonumber(_pLua, 2); // double:双精度浮点数
    17     BOOL B = lua_toboolean(_pLua, 3); // ZC: 这里返回的是 int (即 BOOL)
    18 
    19     printf("%d, %f, %d
    ", i, f, B);
    20     return 1;
    21 }
    22 
    23 void main()
    24 {
    25     //char* pcLua = "Test(1, 1.1, true);";
    26     char* pcLua = "Test(1, 1.1, 0);";
    27 
    28     lua_State *pLua = lua_open();
    29     lua_register(pLua, "Test", Test);
    30     luaL_dostring(pLua, pcLua);
    31 
    32     lua_close(pLua);
    33 }

    ZC:测试下来,脚本里面 布尔型的参数写成1/0时,解析出来的结果不对,打印出来都是 1 。

    7、

  • 相关阅读:
    IOS技能点之Foundation之NSString
    JavaScript学习笔记 -- ES6学习(二) let 和const
    JavaScript 学习笔记-- ES6学习(一)介绍以及Babel的使用
    JavaScript 学习笔记: 扩充类型的功能
    PHP学习笔记(八)
    PHP学习笔记(六)
    Less 官方文档学习笔记
    PHP学习笔记(五)
    PHP 学习笔记 (四)
    PHP 学习笔记 (三)
  • 原文地址:https://www.cnblogs.com/cppskill/p/5258012.html
Copyright © 2020-2023  润新知