加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

tolua++初探(二)

发布时间:2020-12-14 22:27:56 所属栏目:大数据 来源:网络整理
导读:??? tolua++的源码包中有很多测试例子。这里我用更最简单的例子来学习。???? ? ? 第一个例子是数组。仅仅是把C++中的一个数组导出到Lua中,可以在脚本中访问并修改。??? ? ? ?tarray.pkg文件:??? $#include "tarray.h"extern int g_Arr[10]@Arr; ???? 很简

??? tolua++的源码包中有很多测试例子。这里我用更最简单的例子来学习。????

? ? 第一个例子是数组。仅仅是把C++中的一个数组导出到Lua中,可以在脚本中访问并修改。???

? ? ?tarray.pkg文件:???

$#include "tarray.h"
extern int g_Arr[10]@Arr;

???? 很简单,$#include?"tarray.h",包含实际的C头文件,这个语句会去掉$符号,直接插入到tolua++.exe生成的C文件中。文档中说$lfile,$cfile,$ifile会特别处理,我试验了下,不像说的那个样子。????

? ? extern int g_Arr[10]@Arr,tolua++会分析这一句,将g_Arr[10]映射到lua中的Arr上。其中@后面是你想在lua中看到的变量名。????

? ? tarray.h文件也只有一句:

#ifndef _TESTARRAY_H
#define _TESTARRAY_H
extern int g_Arr[10];
#endif

??? g_Arr的实例在一个cpp文件中。????

? ? 用tolua++.exe生成用于导出c++对象到lua脚本中的CPP文件:

tolua ++ .exe? - n?tarray? o?tarray.cpp?tarray.pkg

??? -n tarray选项指定包的名字为tarray。如果不用-n显式指定,tolua++.exe会生成一个和pkg文件名一样的包名,同时生成tolua_**_open(lua_State*)入口函数。??? ????

? ? 将此CPP文件加入工程。????

? ? 在工程中加入lua5.1.lib,tolua++.lib,包含lua.hpp,tolua++.h,然后写点测试代码,就可以编译了。程序主文件array.cpp:

    #include "stdafx.h"
    #include "lua.hpp"
    #include "tarray.h"

    int tolua_tarray_open (lua_State* tolua_S);
    int g_Arr[10]={0};
    int _tmain(int argc,_TCHAR* argv[])
    { 
        lua_State * L = lua_open();
        int i=0;
        for(i=0; i<10; i++) g_Arr[i] = i;

        luaopen_base(L);
        tolua_tarray_open(L);
        luaL_dofile(L,"../scripts/array.lua");

        printf("now in c++,re-show Arr:");
        for(i=0; i<10; i++) printf("%d ",g_Arr[i]);
        printf(" ");

        lua_close(L);
        return 0;
    }


??? luaopen_tarray_open是必须要调用的,tolua++.exe根据你命令行中指定的名字生成tolua_**_open函数。该函数用来导出c++对象到lua脚本中,所以必须在你执行lua脚本之前调用。函数的原型在由tolua++.exe生成的cpp文件中。???

? ? 脚本文件array.lua内容如下:

    print("now in lua script!   try to print 'Arr' by name:")
    print(Arr)
    --print contents of Arr
    print("now print 'Arr':")
    for i=0,9 do print(Arr[i]) end

    --change contents of Arr
    print("now change the Arr.")
    for i=0,9 do Arr[i] = i*2 end

??? 第一个例子到此为止。编译后可以进行测试了。????

? ? 我针对DEBUG和release版本生成了不同的DLL和LIB文件,好用于测试。

? ? 总结一下步骤:????

  1. ? ? 编写C头文件,定义想导出的对象 ? ?
  2. ? ? 编写pkg文件,包含之前的C头文件,用tolua++可识别的规则定义你要导出的对象 ? ?
  3. ? ? 用tolua++.exe生成CPP文件 ? ?
  4. ? ? 将3生成的文件,1中的头文件,tolua++的头文件,lua的头文件及相关的库加入工程。 ? ?
  5. ? ? 编写lua脚本文件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读