微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lua与C/C++的交互

lua 从 http://code.google.com/p/luaforwindows/ 取得
LuaTinker 可以从 http://download.csdn.net/download/esrrhs/3838889 取得
tolua++ 可以从 http://www.codenix.com/~tolua/ 取得

关于Lua与C/C++的交互
C/C++调用Lua的函数还是比较简单的,可以参考lua tinker的实现。
Lua调用C/C++的函数如果用最原始的方式有很大限制,只能调用类型为
typedef int (*lua_CFunction) (lua_State *L);
函数,如果想调用任意类型的函数甚至C++的类成员函数就需要进行一些封装,有一些现成的库已经帮我们实现了。我试下来比较好用的就是lua tinker和tolua++。

lua tinker
license未知,官网没有找到,可以从这里下载到http://download.csdn.net/download/esrrhs/3838889
体积小,只有2个文件lua_tinker.h/lua_tinker.cpp
因为采用C++模板实现,绑定函数的参数个数有限制,当然可以自己扩展。
函数绑定到lua中的名称可以自定义,可以与C++中不同,例如加上特定前缀或后缀。
除了函数绑定还lua tinker还封装了函数调用,读取设置变量等操作。

tolua++ 使用MIT license。官网http://www.codenix.com/~tolua/ 这其实是一个工具,编写.pkg文件声明绑定的函数和类,通过tolua++.exe生成绑定代码(.cpp),然后在程序中调用生成的绑定代码来完成绑定。 需要通过下载的文件编译出tolua++.exe和一个lib,lib用来和自己的工程链接支持绑定。 tolua++是用C实现的,因为绑定代码是通过工具分析pkg生成的,没有参数上的限制。 但限制了绑定函数在lua中的名称和C++中相同。 为了方便我将.pkg文件写成了 $#include "lua_interface.h" $ifile "lua_interface.h" 将需要提供给lua的接口全部声明在lua_interface.h中。 当接口发生变化后,使用 tolua++.exe -n lua_interface -o lua_interface.cpp lua_interface.pkg 更新.cpp文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐