三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍

最近对lua比较感兴趣,工欲善其事必先利其器,方便下一步的学习。

一. 下面两张图比较形象描述了lua语言定位及交互方法:

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第1张图片

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第2张图片

   (1) Lua可以让程序员开发在Lua脚本中调用C/C++函数的接口,这个接口称做LuaGlue函数,因为它们可以在Lua环境中整合C

     /C++的功能。

    (2)  Lua API提供了函数让C++代码也可以直接调用Lua函数,还提供了方法可以传递字符和长文字给Lua解释。

    综合上面两点所述,C/C++代码和Lua脚本之间的交互是双向的!

二. QT环境部署方法简介

使用tolua有以下步骤: 这里只讲工程建立,2~5参考前一篇log。

  1. 工程建立
  2. 编写c/c++文件.
  3. 编写.pkg文件,填写需要导出的c/c++接口.
  4. 使用tolua可执行程序将pkg接口导出成LuaVm可调用的栈交互c/c++文件.
  5. 将第三步生成的文件和其他c/c++文件一起编译生成最终的可执行程序.

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

1).下载http://www.lua.org/versions.html#5.3

2).下载tolua-5.2.4

Tulua官网http://webserver2.tecgraf.puc-rio.br/~celes/tolua/,更新到tolua-5.2.4,支持lua5.2.4。官网只提供了tolua的源代码,没有提供任何程序。

下载代码解压后,在src目录下有三个目录,如下:

Bin目录中包含了生成tolua++.exe转换程序的代码,我以使用VS2015编译,文章最后有下载地址。

Lib目录包含了程序使用tolua时需要包含的库的代码,因为代码比较少,我一般直接将lib文件夹中的代码直接包含到程序中。

3) QT工程编译

a.生成lua lib

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第3张图片

 

b.  tolualib生成

(1).  lua5.3.5: 在项目中去除掉lua.c和luac.c文件.

(2).  tolua在Bin目录下有两个.c文件,tolua.c、toluabind.c,将这两个文件加入到项目中,另外项目中还须要lua5.2.4代码和Lib目录下的代码.。如下:

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第4张图片

(3). 生成tolua.exe

 

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第5张图片

三.使用样例

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第6张图片lua调用

main.cpp

#include 
extern "C"
{
#include "lualib.h"
#include "lauxlib.h"
}
#include "mylib.h"
using namespace std;
int main(int argc, char *argv[])
{

         int tolua_mylib_open(lua_State*);

    lua_State* state = luaL_newstate();
    luaL_openlibs(state);
    tolua_mylib_open(state);
    if (luaL_dofile(state, "scripts/testlua.lua") != 0)
    {
        cout << "excute lua file failed!" << endl;
        lua_close(state);
        return 1;
   }
   lua_close(state); 
   system("pause");  
   return 0;
}

tetstlua.lua

local test = Test:new(1, 2)
test:sayHello()
print("a = " .. test:getA())
print("a + b = " .. test:add())
使用tolua.EXE将上述lua脚本生成tolua.CPP,并加入到qt工程,运行结果如下:

三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍_第7张图片

你可能感兴趣的:(lua)