【lua】使用 tolua 实现 lua 与 c++ 交互

本文介绍了使用tolua库实现lua与c++交互的方法,包括tolua简介、使用流程、导出源文件以及在c++和lua程序中如何使用tolua。通过tolua,可以将c/c++代码导出为lua可直接调用的模块,简化lua访问c/c++的工作。
摘要由CSDN通过智能技术生成

tolua 简介

tolua 也叫 tolua++,是一个第三方库,简化了 lua 访问 c/c++ 的工作。tolua 自动导出 c/c++ 中的常量、变量、函数、类等,提供给 lua 直接访问和调用。lua 与 c 是可以直接相互访问的,不使用 tolua 或其它第三方库也可以实现 lua 调用 c/c++,但比较麻烦,开发效率太低。

lua 直接访问 c/c++ 可以参考我这篇文章
lua 访问 c

可以看到无论是在 c 程序中创建一个 lua 环境来执行 lua 代码,还是导出一个 c 模块供 lua 程序使用;要让 lua 能访问 c 函数,必须将手动将 c 函数注册到 lua 环境中;另外,c 函数参数和返回值都需要手动操作栈。这个效率是很慢的,最好的办法就是像写普通 c 代码一样,然后将 c 程序导出成 lua 可以直接调用的代码,tolua 就是干这个事的。

tolua 官网:http://webserver2.tecgraf.puc-rio.br/~celes/tolua/tolua-3.2.html#using

tolua 下载地址:https://github.com/LuaDist/tolua

使用 tolua

从 github 下载的 tolua 是源代码,必须先编译,编译之后我们将得到两个文件 tolua.exe 和 tolua.lib。tolua.exe 更像一个工具,负责从包文件(.pkg) 中生成 .c 文件或 .cpp 文件,这个 c/c++ 源文件就是导出的可供 lua 调用的代码。tolua.lib 则是 tolua 源码编译后的库,要在程序中使用 tolua,则必须包括这个库文件。

tolua 的编译使用 cmake 来编译,打开 cmake gui,然后选择 tolua 的根目录,再选择生成项目的存放路径,然后点击 Configure,选择要使用的 ide(windows 上一般为 visual studio),然后点击 Generate 就会生成相应的项目文件。具体的就不详说了,网上有很多教程。生成项目之后直接打开 vs 解决方案,生成所有项目即可。

编译完成之后,共有下面几个文件
* tolua.exe 用于从 .pkg 文件生成 .c/.cpp 文件
* tolua.dll 动态链接库文件
* tolua.lib 动态链接库对应的 lib 文件,如果是使用静态链接库项目生成的 lib 文件,则只有一个 lib 文件,没有 dll 文件
* tolua.h 头文件,在源代码的 include 目录下

使用 tolua 有三步,

第一步,正常编写 c/c++ 代码,然后编写对应的 package 文件,package 文件语法基本与 .h 文件一样,注意下面几点即可
* 不能有 public,private 等作用域修饰符,只能导出共有的成员,默认就是 public
* 函数原型和头文件保持一致,包括函数名参数和返回值
* 虚函数不能导出
* 在文件头使用 $#include "test.h" 包含头文件

第二步,使用 tolua.exe 从 package 文件生成相应的 c/c++ 源文件。在 tolua.exe 所有目录打开命令行,然后输入 tolua -n [mylib] -o [test.cpp] test.pkg,-n 参数指明这个文件所在的包,如果不写的话就默认跟文件名一样,-o 指明生成的源文件名,这个参数是必须的,最后就是源 package 文件。因为我生成的 tolua.exe 是依赖于动态链接库的,所以要把 tolua.dll 放在 tolua.exe 目录下,如果是使用静态链接库生成的 tolua.exe 则不用。为了方便起见,也可以将 tolua.exe 添加在环境变量,把 tolua.exe 所在的路径添加到 path 变量中去即可。

第三步,在项目中使用 tolua 生成的文件,这里的文件包括使用 c/c++ 写的原始代码,使用 tolua 导出的 c/c++ 源文件。导出的源文件中有一个方法 tolua_mylib_open,其中 mylib 就是上面 -n 参数指定的包名。使用之前要先在 c++ 层创建 lua 环境之后调用 tolua_mylib_open 函数,之后 lua 代码就可以访问 c++ 的内容了,访问的时候是通过 tolua 调用到上面导出的源文件,然后再调用到原始的实现文件。

导出源文件

上面讲了使用 tolua 的三部曲,下面使用实际例子讲解一下。首先,正常编写 c&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值